[DX] derive default timezone from reference_date option when possible

This commit is contained in:
Yonel Ceruto 2019-07-26 09:39:46 -04:00
parent 9216cb75ac
commit a62feea4ad
2 changed files with 25 additions and 1 deletions

View File

@ -267,6 +267,18 @@ class TimeType extends AbstractType
];
};
$modelTimezone = static function (Options $options, $value): ?string {
if (null !== $value) {
return $value;
}
if (null !== $options['reference_date']) {
return $options['reference_date']->getTimezone()->getName();
}
return null;
};
$resolver->setDefaults([
'hours' => range(0, 23),
'minutes' => range(0, 59),
@ -276,7 +288,7 @@ class TimeType extends AbstractType
'input_format' => 'H:i:s',
'with_minutes' => true,
'with_seconds' => false,
'model_timezone' => null,
'model_timezone' => $modelTimezone,
'view_timezone' => null,
'reference_date' => null,
'placeholder' => $placeholderDefault,
@ -325,6 +337,8 @@ class TimeType extends AbstractType
$resolver->setAllowedTypes('minutes', 'array');
$resolver->setAllowedTypes('seconds', 'array');
$resolver->setAllowedTypes('input_format', 'string');
$resolver->setAllowedTypes('model_timezone', ['null', 'string']);
$resolver->setAllowedTypes('view_timezone', ['null', 'string']);
$resolver->setAllowedTypes('reference_date', ['null', \DateTimeInterface::class]);
}

View File

@ -860,6 +860,16 @@ class TimeTypeTest extends BaseTypeTest
]);
}
public function testModelTimezoneDefaultToReferenceDateTimezoneIfProvided()
{
$form = $this->factory->create(static::TESTED_TYPE, null, [
'view_timezone' => 'Europe/Berlin',
'reference_date' => new \DateTimeImmutable('now', new \DateTimeZone('Europe/Berlin')),
]);
$this->assertSame('Europe/Berlin', $form->getConfig()->getOption('model_timezone'));
}
public function testPassDefaultChoiceTranslationDomain()
{
$form = $this->factory->create(static::TESTED_TYPE);