diff --git a/src/Hydrator.php b/src/Hydrator.php index b94e8e7..9652641 100755 --- a/src/Hydrator.php +++ b/src/Hydrator.php @@ -63,7 +63,10 @@ private static function hydrateProperty(\ReflectionProperty $property, mixed $va } if ($property->getType()->isBuiltin()) { - return $value; + return match ($property->getType()->getName()) { + 'bool' => filter_var($value, FILTER_VALIDATE_BOOL), + default => $value, + }; } return self::cast($property->getType()->getName(), $value, $allowsNull); diff --git a/tests/SimpleHydratorTest.php b/tests/SimpleHydratorTest.php index de05ae7..7edcab9 100644 --- a/tests/SimpleHydratorTest.php +++ b/tests/SimpleHydratorTest.php @@ -84,6 +84,31 @@ public function testItCanHydrateObjectUsingHydrator() $this->assertSame('Porsche', $car->brand); } + public function testItCanHydrateBool() + { + $data = $this->data; + $data['male'] = false; + + $person = Hydrator::hydrate(Human::class, $data); + $this->assertSame(false, $person->male); + + $data['male'] = 'true'; + $person = Hydrator::hydrate(Human::class, $data); + $this->assertSame(true, $person->male); + + $data['male'] = 'false'; + $person = Hydrator::hydrate(Human::class, $data); + $this->assertSame(false, $person->male); + + $data['male'] = 'TRUE'; + $person = Hydrator::hydrate(Human::class, $data); + $this->assertSame(true, $person->male); + + $data['male'] = 'FALSE'; + $person = Hydrator::hydrate(Human::class, $data); + $this->assertSame(false, $person->male); + } + public function testObjectCanHydrateItselfWhenExtendingHydrator() { $person = Human::fromArray($this->data);