[Form][Type Date/Time] added choice_translation_domain option.

This commit is contained in:
Abdellatif Ait boudad 2015-07-17 12:03:45 +00:00 committed by Tobias Schultze
parent 7b358a144a
commit 1f3af26e5c
7 changed files with 176 additions and 0 deletions

View File

@ -4,6 +4,7 @@ CHANGELOG
2.8.0
-----
* added option "choice_translation_domain" to DateType, TimeType and DateTimeType.
* deprecated option "read_only" in favor of "attr['readonly']"
* added the html5 "range" FormType
* deprecated the "cascade_validation" option in favor of setting "constraints"

View File

@ -116,6 +116,7 @@ class DateTimeType extends AbstractType
'days',
'empty_value',
'placeholder',
'choice_translation_domain',
'required',
'translation_domain',
'html5',
@ -131,6 +132,7 @@ class DateTimeType extends AbstractType
'with_seconds',
'empty_value',
'placeholder',
'choice_translation_domain',
'required',
'translation_domain',
'html5',
@ -245,6 +247,7 @@ class DateTimeType extends AbstractType
$resolver->setDefined(array(
'empty_value', // deprecated
'placeholder',
'choice_translation_domain',
'years',
'months',
'days',

View File

@ -94,10 +94,13 @@ class DateType extends AbstractType
// Only pass a subset of the options to children
$yearOptions['choices'] = $this->formatTimestamps($formatter, '/y+/', $this->listYears($options['years']));
$yearOptions['placeholder'] = $options['placeholder']['year'];
$yearOptions['choice_translation_domain'] = $options['choice_translation_domain']['year'];
$monthOptions['choices'] = $this->formatTimestamps($formatter, '/[M|L]+/', $this->listMonths($options['months']));
$monthOptions['placeholder'] = $options['placeholder']['month'];
$monthOptions['choice_translation_domain'] = $options['choice_translation_domain']['month'];
$dayOptions['choices'] = $this->formatTimestamps($formatter, '/d+/', $this->listDays($options['days']));
$dayOptions['placeholder'] = $options['placeholder']['day'];
$dayOptions['choice_translation_domain'] = $options['choice_translation_domain']['day'];
}
// Append generic carry-along options
@ -205,6 +208,23 @@ class DateType extends AbstractType
);
};
$choiceTranslationDomainNormalizer = function (Options $options, $choiceTranslationDomain) {
if (is_array($choiceTranslationDomain)) {
$default = false;
return array_replace(
array('year' => $default, 'month' => $default, 'day' => $default),
$choiceTranslationDomain
);
};
return array(
'year' => $choiceTranslationDomain,
'month' => $choiceTranslationDomain,
'day' => $choiceTranslationDomain,
);
};
$format = function (Options $options) {
return $options['widget'] === 'single_text' ? DateType::HTML5_FORMAT : DateType::DEFAULT_FORMAT;
};
@ -231,10 +251,12 @@ class DateType extends AbstractType
// this option.
'data_class' => null,
'compound' => $compound,
'choice_translation_domain' => false,
));
$resolver->setNormalizer('empty_value', $placeholderNormalizer);
$resolver->setNormalizer('placeholder', $placeholderNormalizer);
$resolver->setNormalizer('choice_translation_domain', $choiceTranslationDomainNormalizer);
$resolver->setAllowedValues('input', array(
'datetime',

View File

@ -69,6 +69,7 @@ class TimeType extends AbstractType
// Only pass a subset of the options to children
$hourOptions['choices'] = $hours;
$hourOptions['placeholder'] = $options['placeholder']['hour'];
$hourOptions['choice_translation_domain'] = $options['choice_translation_domain']['hour'];
if ($options['with_minutes']) {
foreach ($options['minutes'] as $minute) {
@ -77,6 +78,7 @@ class TimeType extends AbstractType
$minuteOptions['choices'] = $minutes;
$minuteOptions['placeholder'] = $options['placeholder']['minute'];
$minuteOptions['choice_translation_domain'] = $options['choice_translation_domain']['minute'];
}
if ($options['with_seconds']) {
@ -88,6 +90,7 @@ class TimeType extends AbstractType
$secondOptions['choices'] = $seconds;
$secondOptions['placeholder'] = $options['placeholder']['second'];
$secondOptions['choice_translation_domain'] = $options['choice_translation_domain']['second'];
}
// Append generic carry-along options
@ -194,6 +197,23 @@ class TimeType extends AbstractType
);
};
$choiceTranslationDomainNormalizer = function (Options $options, $choiceTranslationDomain) {
if (is_array($choiceTranslationDomain)) {
$default = false;
return array_replace(
array('hour' => $default, 'minute' => $default, 'second' => $default),
$choiceTranslationDomain
);
};
return array(
'hour' => $choiceTranslationDomain,
'minute' => $choiceTranslationDomain,
'second' => $choiceTranslationDomain,
);
};
$resolver->setDefaults(array(
'hours' => range(0, 23),
'minutes' => range(0, 59),
@ -217,10 +237,12 @@ class TimeType extends AbstractType
// this option.
'data_class' => null,
'compound' => $compound,
'choice_translation_domain' => false,
));
$resolver->setNormalizer('empty_value', $placeholderNormalizer);
$resolver->setNormalizer('placeholder', $placeholderNormalizer);
$resolver->setNormalizer('choice_translation_domain', $choiceTranslationDomainNormalizer);
$resolver->setAllowedValues('input', array(
'datetime',

View File

@ -519,4 +519,57 @@ class DateTimeTypeTest extends TestCase
$this->assertSame(array(), iterator_to_array($form['time']->getErrors()));
$this->assertSame(array($error), iterator_to_array($form->getErrors()));
}
public function testPassDefaultChoiceTranslationDomain()
{
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateTimeType', null, array(
'with_seconds' => true,
));
$view = $form->createView();
$this->assertFalse($view['date']['year']->vars['choice_translation_domain']);
$this->assertFalse($view['date']['month']->vars['choice_translation_domain']);
$this->assertFalse($view['date']['day']->vars['choice_translation_domain']);
$this->assertFalse($view['time']['hour']->vars['choice_translation_domain']);
$this->assertFalse($view['time']['minute']->vars['choice_translation_domain']);
$this->assertFalse($view['time']['second']->vars['choice_translation_domain']);
}
public function testPassChoiceTranslationDomainAsString()
{
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateTimeType', null, array(
'choice_translation_domain' => 'messages',
'with_seconds' => true,
));
$view = $form->createView();
$this->assertSame('messages', $view['date']['year']->vars['choice_translation_domain']);
$this->assertSame('messages', $view['date']['month']->vars['choice_translation_domain']);
$this->assertSame('messages', $view['date']['day']->vars['choice_translation_domain']);
$this->assertSame('messages', $view['time']['hour']->vars['choice_translation_domain']);
$this->assertSame('messages', $view['time']['minute']->vars['choice_translation_domain']);
$this->assertSame('messages', $view['time']['second']->vars['choice_translation_domain']);
}
public function testPassChoiceTranslationDomainAsArray()
{
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateTimeType', null, array(
'choice_translation_domain' => array(
'year' => 'foo',
'month' => 'test',
'hour' => 'foo',
'second' => 'test',
),
'with_seconds' => true,
));
$view = $form->createView();
$this->assertSame('foo', $view['date']['year']->vars['choice_translation_domain']);
$this->assertSame('test', $view['date']['month']->vars['choice_translation_domain']);
$this->assertFalse($view['date']['day']->vars['choice_translation_domain']);
$this->assertSame('foo', $view['time']['hour']->vars['choice_translation_domain']);
$this->assertFalse($view['time']['minute']->vars['choice_translation_domain']);
$this->assertSame('test', $view['time']['second']->vars['choice_translation_domain']);
}
}

View File

@ -950,4 +950,41 @@ class DateTypeTest extends TestCase
$this->assertEquals($listChoices, $view['year']->vars['choices']);
}
public function testPassDefaultChoiceTranslationDomain()
{
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateType');
$view = $form->createView();
$this->assertFalse($view['year']->vars['choice_translation_domain']);
$this->assertFalse($view['month']->vars['choice_translation_domain']);
$this->assertFalse($view['day']->vars['choice_translation_domain']);
}
public function testPassChoiceTranslationDomainAsString()
{
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateType', null, array(
'choice_translation_domain' => 'messages',
));
$view = $form->createView();
$this->assertSame('messages', $view['year']->vars['choice_translation_domain']);
$this->assertSame('messages', $view['month']->vars['choice_translation_domain']);
$this->assertSame('messages', $view['day']->vars['choice_translation_domain']);
}
public function testPassChoiceTranslationDomainAsArray()
{
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateType', null, array(
'choice_translation_domain' => array(
'year' => 'foo',
'day' => 'test',
),
));
$view = $form->createView();
$this->assertSame('foo', $view['year']->vars['choice_translation_domain']);
$this->assertFalse($view['month']->vars['choice_translation_domain']);
$this->assertSame('test', $view['day']->vars['choice_translation_domain']);
}
}

View File

@ -736,4 +736,42 @@ class TimeTypeTest extends TestCase
'seconds' => 'bad value',
));
}
public function testPassDefaultChoiceTranslationDomain()
{
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\TimeType');
$view = $form->createView();
$this->assertFalse($view['hour']->vars['choice_translation_domain']);
$this->assertFalse($view['minute']->vars['choice_translation_domain']);
}
public function testPassChoiceTranslationDomainAsString()
{
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\TimeType', null, array(
'choice_translation_domain' => 'messages',
'with_seconds' => true,
));
$view = $form->createView();
$this->assertSame('messages', $view['hour']->vars['choice_translation_domain']);
$this->assertSame('messages', $view['minute']->vars['choice_translation_domain']);
$this->assertSame('messages', $view['second']->vars['choice_translation_domain']);
}
public function testPassChoiceTranslationDomainAsArray()
{
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\TimeType', null, array(
'choice_translation_domain' => array(
'hour' => 'foo',
'second' => 'test',
),
'with_seconds' => true,
));
$view = $form->createView();
$this->assertSame('foo', $view['hour']->vars['choice_translation_domain']);
$this->assertFalse($view['minute']->vars['choice_translation_domain']);
$this->assertSame('test', $view['second']->vars['choice_translation_domain']);
}
}