diff --git a/src/Schema/Elements/Base.php b/src/Schema/Elements/Base.php index 56ab3b6..7db77d7 100644 --- a/src/Schema/Elements/Base.php +++ b/src/Schema/Elements/Base.php @@ -166,6 +166,8 @@ private function doFinalize($value, Context $context) if ($this->castTo) { if (Nette\Utils\Reflection::isBuiltinType($this->castTo)) { settype($value, $this->castTo); + } elseif (in_array($this->castTo, [\DateTime::class, \DateTimeImmutable::class], true)) { + $value = new ($this->castTo)($value); } else { $value = Nette\Utils\Arrays::toObject($value, new $this->castTo); } diff --git a/tests/Schema/Expect.castTo.phpt b/tests/Schema/Expect.castTo.phpt index 0d0d5bb..b0bdbd7 100644 --- a/tests/Schema/Expect.castTo.phpt +++ b/tests/Schema/Expect.castTo.phpt @@ -29,3 +29,20 @@ test('', function () { Assert::equal((object) ['a' => 1, 'b' => 2], (new Processor)->process($schema, ['a' => 1, 'b' => 2])); }); + + +// wip +class Foo +{ + public \DateTime $bar; +} + +$processor = new \Nette\Schema\Processor; +$processor->process( + \Nette\Schema\Expect::structure([ + 'bar' => \Nette\Schema\Expect::string()->castTo('DateTime'), + ])->castTo(Foo::class), + [ + 'bar' => '2021-01-01', + ], +);