diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToStringTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToStringTransformer.php index 4b44a081ec..660f94bb4e 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToStringTransformer.php +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToStringTransformer.php @@ -96,6 +96,10 @@ class DateTimeToStringTransformer extends BaseDateTimeTransformer try { $dateTime = new \DateTime($value, new \DateTimeZone($this->outputTimezone)); + $lastErrors = \DateTime::getLastErrors(); + if (0 < $lastErrors['warning_count'] || 0 < $lastErrors['error_count']) { + throw new \UnexpectedValueException(implode(', ', array_merge(array_values($lastErrors['warnings']), array_values($lastErrors['errors'])))); + } // Force value to be in same format as given to transform if ($value !== $dateTime->format($this->format)) { diff --git a/tests/Symfony/Tests/Component/Form/Extension/Core/DataTransformer/DateTimeToStringTransformerTest.php b/tests/Symfony/Tests/Component/Form/Extension/Core/DataTransformer/DateTimeToStringTransformerTest.php index 46e328a815..d695aa18d9 100644 --- a/tests/Symfony/Tests/Component/Form/Extension/Core/DataTransformer/DateTimeToStringTransformerTest.php +++ b/tests/Symfony/Tests/Component/Form/Extension/Core/DataTransformer/DateTimeToStringTransformerTest.php @@ -140,4 +140,13 @@ class DateTimeToStringTransformerTest extends DateTimeTestCase $reverseTransformer->reverseTransform('2010-2010-2010'); } + + public function testReverseTransformWithNonExistingDate() + { + $reverseTransformer = new DateTimeToStringTransformer(); + + $this->setExpectedException('Symfony\Component\Form\Exception\TransformationFailedException'); + + $reverseTransformer->reverseTransform('2010-04-31'); + } } diff --git a/tests/Symfony/Tests/Component/Form/Extension/Core/Type/DateTimeTypeTest.php b/tests/Symfony/Tests/Component/Form/Extension/Core/Type/DateTimeTypeTest.php index cba6cccd37..ca401a0422 100644 --- a/tests/Symfony/Tests/Component/Form/Extension/Core/Type/DateTimeTypeTest.php +++ b/tests/Symfony/Tests/Component/Form/Extension/Core/Type/DateTimeTypeTest.php @@ -234,4 +234,22 @@ class DateTimeTypeTest extends LocalizedTestCase $this->assertEquals(array(new FormError('Customized invalid message', array())), $form['date']->getErrors()); $this->assertEquals(array(new FormError('Customized invalid message', array())), $form['time']->getErrors()); } + + public function testSubmit_invalidDateTimeSingleText() + { + $form = $this->factory->create('datetime', null, array( + 'data_timezone' => 'UTC', + 'user_timezone' => 'UTC', + 'input' => 'datetime', + 'widget' => 'single_text', + 'invalid_message' => 'Customized invalid message', + )); + + $form->bind('2012-04-31 03:04:05'); + + $this->assertFalse($form->isValid()); + $this->assertNull($form->getData()); + $this->assertEquals('2012-04-31 03:04:05', $form->getClientData()); + $this->assertEquals(array(new FormError('Customized invalid message', array())), $form->getErrors()); + } }