Symfony2在树枝中更改表单日期输入类

时间:2015-05-15 12:00:41

标签: php forms symfony

我很困惑如何覆盖表单模板的代码以满足我的需要。例如,当我创建日期输入字段时,它很长,我想用我的类更改它。我正在阅读此文档http://symfony.com/doc/current/cookbook/form/form_customization.html但是我不知道如何根据我的需要使用该示例:这就是我已经做过的事情:

我在config.yml中添加了水平主题:

# Twig Configuration
twig:
    debug:            "%kernel.debug%"
    strict_variables: "%kernel.debug%"
    form:
        resources: 
            - 'bootstrap_3_horizontal_layout.html.twig' 

这是我输入数据字段的方式:

>add('DateOfBirth', 'date', array(
    'label' => 'Date Of Birth * ',
    'widget' => 'choice',
    'attr' => array('placeholder' => 'Date of Birth')))

它呈现此模板:

<div id="form_DateOfBirth" placeholder="Date of Birth" class="form-inline">
    <select id="form_DateOfBirth_month" name="form[DateOfBirth][month]" class="form-control"></select>

我需要将selected中的课程更改为:

<div id="form_DateOfBirth" placeholder="Date of Birth" class="form-inline">
     <select id="form_DateOfBirth_month" name="form[DateOfBirth][month]" class="span1"></select>

我该怎么做?从文档中我唯一知道我需要做的是:

{% form_theme form _self %}

{% block date_widget %}

{% endblock date_widget %}


 {{ form(form) }}

然后是什么? ; /

我正在尝试做这样的事情:

{% block date_widget -%}
            {% set attr = attr|merge({class: (attr.class|default('') ~ ' span1')|trim}) -%}

    {%- endblock date_widget %}

但是我得到了未定义的变量attr ...; /

更新

代码:{{ form_widget(form.DateOfBirth, {'attr': {'class': 'span1'}}) }}不是我需要的。

这改变了整个div的类。我需要更改字段select的类,其中包含类form-control

这是我得到的(class="span1 form-inline"):

<div id="form_DateOfBirth" class="span1 form-inline"><select id="form_DateOfBirth_month" name="form[DateOfBirth][month]" class="form-control"></select></div>

3 个答案:

答案 0 :(得分:0)

覆盖整个窗口小部件就意味着更改会影响其他所有窗体。如果您需要其他模板长输入怎么办?您可以单独为输入添加额外的类。比如像这样:

  

那将在您的FormType类

->add('DateOfBirth', 'date', array(
    'label' => 'Date Of Birth * ',
    'widget' => 'choice',
    'attr' => array(
        'placeholder' => 'Date of Birth',
        'class' => 'your_custom_css_class' // Add more if needed
    ))
)

  

那将是你的twig模板中的例子

{{ form_widget(form.birthdate, { 'attr': {'class': 'your_class'} }) }}

您还可以将自定义应用于表单的特定字段。有关该主题的更多信息,请阅读here.

- 更新 -

看看这个this answer on Stackoverflow

答案 1 :(得分:0)

尝试:

{{ form_widget(form.DateOfBirth, {'attr': {'class': 'span1'}}) }}

表单是从控制器传递到视图的表单视图

请参阅doc:http://symfony.com/fr/doc/current/reference/forms/twig_reference.html

编辑:

  

这改变了整个div的类。我需要更改字段select的类,它有一个类form-control

这正是我的工作方式,我使用相同的语法(我使用Symfony 2和bootstrap)并且只更改输入/选择元素的类而不是周围的目录(我也只使用form_widget()方法)

您可以打印出使用此代码时可以看到的内容吗?

答案 2 :(得分:0)

You can give class by separate to the date both year month and day for example if the date is by name DateOfBirth would look like this


{{form_widget(form.DateOfBirth.day , {'attr': {'class': 'form-control'}}) }}

{{ form_widget(form.DateOfBirth.month , {'attr': {'class': 'form-control'}}) }}

{{ form_widget(form.DateOfBirth.year , {'attr': {'class': 'form-control'}}) }}