[Form] The IntlDateFormatter pattern can now be passed via the format option
* Also changed the default value of the calendar paramter to \IntlDateFormatter:GREGORIAN in DateTimeToLocalizedStringTransformer which is the same as the default value in StubIntlDateFormatter
This commit is contained in:
parent
58f869a920
commit
a8152326fb
@ -40,7 +40,7 @@ class DateTimeToLocalizedStringTransformer extends BaseDateTimeTransformer
|
|||||||
* @throws UnexpectedTypeException If a format is not supported
|
* @throws UnexpectedTypeException If a format is not supported
|
||||||
* @throws UnexpectedTypeException if a timezone is not a string
|
* @throws UnexpectedTypeException if a timezone is not a string
|
||||||
*/
|
*/
|
||||||
public function __construct($inputTimezone = null, $outputTimezone = null, $dateFormat = null, $timeFormat = null, $calendar = null, $pattern = null)
|
public function __construct($inputTimezone = null, $outputTimezone = null, $dateFormat = null, $timeFormat = null, $calendar = \IntlDateFormatter::GREGORIAN, $pattern = null)
|
||||||
{
|
{
|
||||||
parent::__construct($inputTimezone, $outputTimezone);
|
parent::__construct($inputTimezone, $outputTimezone);
|
||||||
|
|
||||||
|
@ -27,17 +27,39 @@ class DateType extends AbstractType
|
|||||||
{
|
{
|
||||||
public function buildForm(FormBuilder $builder, array $options)
|
public function buildForm(FormBuilder $builder, array $options)
|
||||||
{
|
{
|
||||||
|
$format = $options['format'];
|
||||||
|
$pattern = null;
|
||||||
|
|
||||||
|
$allowedFormatOptionValues = array(
|
||||||
|
\IntlDateFormatter::FULL,
|
||||||
|
\IntlDateFormatter::LONG,
|
||||||
|
\IntlDateFormatter::MEDIUM,
|
||||||
|
\IntlDateFormatter::SHORT,
|
||||||
|
);
|
||||||
|
|
||||||
|
// If $format is not in the allowed options, it's considered as the pattern of the formatter if it is a string
|
||||||
|
if (!in_array($format, $allowedFormatOptionValues, true)) {
|
||||||
|
if (is_string($format)) {
|
||||||
|
$defaultOptions = $this->getDefaultOptions($options);
|
||||||
|
|
||||||
|
$format = $defaultOptions['format'];
|
||||||
|
$pattern = $options['format'];
|
||||||
|
} else {
|
||||||
|
throw new FormException('The "format" option must be one of the IntlDateFormatter constants (FULL, LONG, MEDIUM, SHORT) or a string representing a custom pattern');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$formatter = new \IntlDateFormatter(
|
$formatter = new \IntlDateFormatter(
|
||||||
\Locale::getDefault(),
|
\Locale::getDefault(),
|
||||||
$options['format'],
|
$format,
|
||||||
\IntlDateFormatter::NONE,
|
\IntlDateFormatter::NONE,
|
||||||
\DateTimeZone::UTC,
|
\DateTimeZone::UTC,
|
||||||
\IntlDateFormatter::GREGORIAN,
|
\IntlDateFormatter::GREGORIAN,
|
||||||
$options['pattern']
|
$pattern
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($options['widget'] === 'single-text') {
|
if ($options['widget'] === 'single-text') {
|
||||||
$builder->appendClientTransformer(new DateTimeToLocalizedStringTransformer($options['data_timezone'], $options['user_timezone'], $options['format'], \IntlDateFormatter::NONE, \IntlDateFormatter::GREGORIAN, $formatter->getPattern()));
|
$builder->appendClientTransformer(new DateTimeToLocalizedStringTransformer($options['data_timezone'], $options['user_timezone'], $format, \IntlDateFormatter::NONE, \IntlDateFormatter::GREGORIAN, $pattern));
|
||||||
} else {
|
} else {
|
||||||
$yearOptions = $monthOptions = $dayOptions = array();
|
$yearOptions = $monthOptions = $dayOptions = array();
|
||||||
$widget = $options['widget'];
|
$widget = $options['widget'];
|
||||||
@ -139,12 +161,6 @@ class DateType extends AbstractType
|
|||||||
'text',
|
'text',
|
||||||
'choice',
|
'choice',
|
||||||
),
|
),
|
||||||
'format' => array(
|
|
||||||
\IntlDateFormatter::FULL,
|
|
||||||
\IntlDateFormatter::LONG,
|
|
||||||
\IntlDateFormatter::MEDIUM,
|
|
||||||
\IntlDateFormatter::SHORT,
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user