diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformer.php index 4e1a33c65f..bad5a7746f 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformer.php +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformer.php @@ -157,6 +157,8 @@ class DateTimeToLocalizedStringTransformer extends BaseDateTimeTransformer $calendar = $this->calendar; $pattern = $this->pattern; - return new \IntlDateFormatter(\Locale::getDefault(), $dateFormat, $timeFormat, $timezone, $calendar, $pattern); + $intlDateFormatter = new \IntlDateFormatter(\Locale::getDefault(), $dateFormat, $timeFormat, $timezone, $calendar, $pattern); + $intlDateFormatter->setLenient(false); + return $intlDateFormatter; } } diff --git a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php index df659ccdad..bc053c6f4a 100644 --- a/src/Symfony/Component/Form/Extension/Core/Type/DateType.php +++ b/src/Symfony/Component/Form/Extension/Core/Type/DateType.php @@ -61,6 +61,7 @@ class DateType extends AbstractType \IntlDateFormatter::GREGORIAN, $pattern ); + $formatter->setLenient(false); if ($options['widget'] === 'single_text') { $builder->appendClientTransformer(new DateTimeToLocalizedStringTransformer($options['data_timezone'], $options['user_timezone'], $format, \IntlDateFormatter::NONE, \IntlDateFormatter::GREGORIAN, $pattern)); diff --git a/tests/Symfony/Tests/Component/Form/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php b/tests/Symfony/Tests/Component/Form/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php index 959fd6337e..cf1a79321b 100644 --- a/tests/Symfony/Tests/Component/Form/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php +++ b/tests/Symfony/Tests/Component/Form/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformerTest.php @@ -286,4 +286,14 @@ class DateTimeToLocalizedStringTransformerTest extends DateTimeTestCase { new DateTimeToLocalizedStringTransformer(null, null, null, 'foobar'); } + + /** + * @expectedException Symfony\Component\Form\Exception\TransformationFailedException + */ + public function testReverseTransformWithNonExistingDate() + { + $transformer = new DateTimeToLocalizedStringTransformer('UTC', 'UTC', \IntlDateFormatter::SHORT); + + $this->assertDateTimeEquals($this->dateTimeWithoutSeconds, $transformer->reverseTransform('31.04.10 04:05')); + } } diff --git a/tests/Symfony/Tests/Component/Form/Extension/Core/Type/DateTypeTest.php b/tests/Symfony/Tests/Component/Form/Extension/Core/Type/DateTypeTest.php index 71e8bc38f1..b97434fb37 100644 --- a/tests/Symfony/Tests/Component/Form/Extension/Core/Type/DateTypeTest.php +++ b/tests/Symfony/Tests/Component/Form/Extension/Core/Type/DateTypeTest.php @@ -13,6 +13,7 @@ namespace Symfony\Tests\Component\Form\Extension\Core\Type; require_once __DIR__ . '/LocalizedTestCase.php'; +use Symfony\Component\Form\FormError; class DateTypeTest extends LocalizedTestCase { @@ -460,4 +461,22 @@ class DateTypeTest extends LocalizedTestCase $this->assertSame('single_text', $view->get('widget')); } + + public function testInvalidDateWithSingleTextDateTime() + { + $form = $this->factory->create('date', null, array( + 'data_timezone' => 'UTC', + 'user_timezone' => 'UTC', + 'widget' => 'single_text', + 'input' => 'datetime', + 'invalid_message' => 'Customized invalid message', + )); + + $form->bind('31.4.2012'); + + $this->assertFalse($form->isValid()); + $this->assertNull($form->getData()); + $this->assertEquals('31.4.2012', $form->getClientData()); + $this->assertEquals(array(new FormError('Customized invalid message', array())), $form->getErrors()); + } }