2017-02-17 33 views
1

我想設置兩部分呈現的DateTimeType字段的屬性。我呈現的兩部分DateTimeType場與設置date_widgettime_widget'single_text'Symfony - 如何設置兩部分呈現的DateTimeType字段的屬性?

$builder 
    ->add('startDate', DateTimeType::class, array(
     'date_widget' => 'single_text', 
     'time_widget' => 'single_text', 
     'date_format' => \IntlDateFormatter::SHORT, 
     'with_seconds' => false, 
     'input'   => 'datetime', 
     'label'   => 'bundle_name.form.travel.startDate', 
     'attr'   => array('class' => 'peter') 
    )) 

在這裏,屬性(attrclass="peter"得到不施加到兩個輸入字段,但到纏div

<div id="travel_startDate" class="peter"> 
    <div class="bootstrap-datepicker date"> 
     <input type="text" id="travel_startDate_date" name="travel[startDate][date]" required="required" class="form-control" value="2/1/17" /> 
    </div> 
    <input type="time" id="travel_startDate_time" name="travel[startDate][time]" required="required" class="form-control" value="22:02" /> 
</div> 

如何爲表單構建器的add(...)函數中的input字段設置屬性?

我特別要求,因爲我不想手動設置twig模板中的小部件。

+0

坦率地說,我不知道這是否可能。但是,你可以通過使用簡單的CSS技巧來達到你的目的。見https://css-tricks.com/almanac/selectors/n/nth-child/ – ihsan

+0

@ihsan設置類屬性只是一個例子......但謝謝。我查找了'DateTimeType'字段的所有選項,並得出了不可能的結論... – goulashsoup

回答

1

這可以通過在Symfony中調整表單主題來實現。 在我的主題以下部分爲我做的伎倆:

{% block datetime_widget -%} 
{% if widget == 'single_text' %} 
    {{- block('form_widget_simple') -}} 
{% else %} 
    {% set attr = attr|merge({class: (attr.class|default('') ~ ' form-inline')|trim}) %} 
    {% set widget_attr = {class: ''} %} 
    {% if attr.class is defined and 'datepicker' in attr.class %} 
     {% set attr = attr|merge({class: attr.class|replace({'datepicker' : ''}) }) %} 
     {% set widget_attr = widget_attr|merge({class: 'datepicker' }) %} 
    {% endif %} 
    <div {{ block('widget_container_attributes') }}> 
     {{ form_errors(form.date) }} 
     {{ form_errors(form.time) }} 
     {{ form_widget(form.date, { datetime: true, attr: widget_attr }) }}&nbsp; 
     {{ form_widget(form.time, { datetime: true }) }} 
    </div> 
{% endif %} 
{%- endblock datetime_widget %} 

簡而言之:

  • 檢查,如果在所提供的attr.class
  • 存在的日期選擇器類替代日期選擇器
  • 舉動它到widget_attr
  • 將widget_attr作爲屬性傳遞給文本小部件
+0

現在,在經過相當長時間的思考之後,我會找到相同的解決方案。但它有點討厭。這麼多工作只是爲了一個簡單的屬性。 – goulashsoup

相關問題