2017-02-17 1 views
1

2部表現のDateTimeTypeフィールドの属性を設定します。私は'single_text'date_widgettime_widgetを設定すると二部DateTimeTypeフィールドのレンダリング:Symfony - 2パートのレンダリングされた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"は、2つの入力フィールドにだけに適用されませんます包ま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 %} 

:DatePickerのクラスは

  • attr.class提供に存在する場合

    • チェックは、日付ピッカー
    • 動きを置き換えますそれをwidget_attrに渡す
    • widget_attrをテキストウィジェットの属性として渡す
  • +0

    今、かなりの時間が経ってから考えてみると、私は同じ解決策になるでしょう。しかし、それは少し不快です。単純な属性のためだけに多くのことが働きます。 – goulashsoup

    関連する問題