Symfony - 如何设置两部分渲染的DateTimeType字段的属性?

时间:2017-02-17 14:42:26

标签: php symfony datetime twig

我想设置两部分呈现的DateTimeType字段的属性。我将设置为date_widgettime_widget设置为'single_text'的两部分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>

如何在表单构建器的input函数中设置add(...)字段的属性?

我特别要问,因为我不想手动在twig模板中设置小部件。

2 个答案:

答案 0 :(得分: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
  • 中是否存在datepicker类
  • 替换datepicker
  • 将其移至widget_attr
  • 将widget_attr作为属性传递给文本小部件

答案 1 :(得分:0)

我使用了材料套件,我想将“ select picker”类添加到年份月份和日期的每个html select标签中。我可以通过以下方式实现。我手动编写表单,然后将attr选项传递给form_row。

{{。(form.date_start.day,{'attr':{'class':'selectpicker'}})}}

...从移动设备添加,用于历史记录