2016-08-19 217 views
1

我使用DateTimeType創建了表單類型。 我將日期時間分隔爲2個小部件(文本輸入)。Symfony DateTimeType輸入文本attr(date_widget和time_widget)

如何使用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

目前,這是不可能的定義,如 「類」 特定屬性只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'] 
]);