我很困惑如何覆盖表单模板的代码以满足我的需要。例如,当我创建日期输入字段时,它很长,我想用我的类更改它。我正在阅读此文档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>
答案 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.
- 更新 -
答案 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'}}) }}