Symfony DateTimeType输入文本attr(date_widget和time_widget)

时间:2016-08-19 09:12:12

标签: php symfony

我使用DateTimeType创建了表单类型。 我将datetime分为2个小部件(文本输入)。

如何使用attr选项格式化文本输入? (我想要将日期类别添加到日期小部件,时间类添加到时间小部件)

我该如何单独验证?

     $builder->add( 'valid_to', DateTimeType::class,
                    array(  'required'=>false,
                            'label'=>'Valid vége',
                            'html5'=>false,
                            'date_widget' => 'single_text',
                            'time_widget' => 'single_text',
                            'format'=>'yyyy-MM-dd HH:mm',
                            'constraints'=>array(   new DateTime(array("message"=>"Invalid datetime. [need: yyyy-mm-dd] [hh:mm]")),
                            ),
                            'attr'=>array('class'=>'datetimepicker',
                            )));

这是一个HTML回复:

<div id="email_template_content_valid_to" class="datetimepicker">
    <input type="text" id="email_template_content_valid_to_date" name="email_template_content[valid_to][date]" value="2016-08-24" />
    <input type="text" id="email_template_content_valid_to_time" name="email_template_content[valid_to][time]" value="00:00" />
</div>

1 个答案:

答案 0 :(得分:1)

目前,无法定义特定属性,例如&#34; class&#34;只有一个DateTimeType小部件(@see https://github.com/symfony/symfony/issues/11824

您必须定义自己的DateTimeType类,以传递时间或日期窗口小部件的特定选项,例如(尚未测试):

//  Symfony\Component\Form\Extension\Core\Type\DateTimeType

// Only pass a subset of the options to children
$dateOptions = array_intersect_key($options, array_flip(array(
    'years',
    'months',
    'days',
    'empty_value',
    'placeholder',
    'required',
    'translation_domain',
    'html5',
    'invalid_message',
    'invalid_message_parameters',
    'date_attr' // <= attr for date widget
)));

$timeOptions = array_intersect_key($options, array_flip(array(
    'hours',
    'minutes',
     'seconds',
     'with_minutes',
     'with_seconds',
     'empty_value',
     'placeholder',
     'required',
     'translation_domain',
     'html5',
     'invalid_message',
     'invalid_message_parameters',
     'time_attr' // <= attr for time widget
)));
$builder->add('valid_to', DateTimeType::class, [
    'required'    => false,
    'label'       => 'Valid vége',
    'html5'       => false,
    'date_widget' => 'single_text',
    'time_widget' => 'single_text',
    'format'      => 'yyyy-MM-dd HH:mm',
    'constraints' => [
        new DateTime(["message" => "Invalid datetime. [need: yyyy-mm-dd] [hh:mm]"]),
    ],
    'date_attr'   => ['class' => 'my_date_class'],
    'time_attr'   => ['class' => 'my_time_class']
 ]);