8000 [WIP][Form] added support for different invalid messages for date, time. · symfony/symfony@195361f · GitHub
[go: up one dir, main page]

Skip to content

Commit 195361f

Browse files
committed
[WIP][Form] added support for different invalid messages for date, time.
Bug fix: yes Feature addition: yes Backwards compatibility break: no Symfony2 tests pass: yes Fixes the following tickets: #4359 Todo: DateTimeType, when used with the widget "text", currently duplicates the invalid error when an invalid value is entered. License of the code: MIT Documentation PR: none
1 parent cc42a18 commit 195361f

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ public function buildForm(FormBuilder $builder, array $options)
4444
$builder->appendClientTransformer(new DateTimeToStringTransformer($options['data_timezone'], $options['user_timezone'], $format));
4545
} else {
4646
// Only pass a subset of the options to children
47+
48+
// Check if an invalid date message is defined
49+
if(isset($options['date_invalid_message'])) {
50+
$options['invalid_message'] = $options['date_invalid_message'];
51+
}
52+
if(isset($options['date_invalid_message_parameters'])) {
53+
$options['invalid_message_parameters'] = $options['date_invalid_message_parameters'];
54+
}
4755
$dateOptions = array_intersect_key($options, array_flip(array(
4856
'years',
4957
'months',
@@ -53,6 +61,14 @@ public function buildForm(FormBuilder $builder, array $options)
5361
'invalid_message',
5462
'invalid_message_parameters'
5563
)));
64+
65+
// Check if an invalid time message is defined
66+
if(isset($options['time_invalid_message'])) {
67+
$options['invalid_message'] = $options['time_invalid_message'];
68+
}
69+
if(isset($options['time_invalid_message_parameters'])) {
70+
$options['invalid_message_parameters'] = $options['time_invalid_message_parameters'];
71+
}
5672
$timeOptions = array_intersect_key($options, array_flip(array(
5773
'hours',
5874
'minutes',
@@ -151,6 +167,10 @@ public function getDefaultOptions(array $options)
151167
'widget' => null,
152168
// This will overwrite "empty_value" child options
153169
'empty_value' => null,
170+
'date_invalid_message' => 'This date is not valid',
171+
'time_invalid_message' => 'This time is not valid',
172+
'date_invalid_message_parameters' => array(),
173+
'time_invalid_message_parameters' => array(),
154174
);
155175
}
156176

tests/Symfony/Tests/Component/Form/Extension/Core/Type/DateTimeTypeTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,4 +234,28 @@ public function testSubmit_invalidDateTime()
234234
$this->assertEquals(array(new FormError('Customized invalid message', array())), $form['date']->getErrors());
235235
$this->assertEquals(array(new FormError('Customized invalid message', array())), $form['time']->getErrors());
236236
}
237+
238+
public function testSubmit_invalidDateTime_differentMessages()
239+
{
240+
$form = $this->factory->create('datetime', null, array(
241+
'date_invalid_message' => 'Customized invalid date message',
242+
'time_invalid_message' => 'Customized invalid time message',
243+
));
244+
245+
$form->bind(array(
246+
'date' => array(
247+
'day' => '31',
248+
'month' => '9',
249+
'year' => '2010',
250+
),
251+
'time' => array(
252+
'hour' => '25',
253+
'minute' => '4',
254+
),
255+
));
256+
2 4F44 57+
$this->assertFalse($form->isValid());
258+
$this->assertEquals(array(new FormError('Customized invalid date message', array())), $form['date']->getErrors());
259+
$this->assertEquals(array(new FormError('Customized invalid time message', array())), $form['time']->getErrors());
260+
}
237261
}

0 commit comments

Comments
 (0)
0