twig上form_widget选项的占位符

时间:2014-12-26 10:19:13

标签: forms symfony twig choice

在控制器端使用PHP,我可以使用createFormBuilder()向我的字段添加占位符:

$form = $this->createFormBuilder($company)
                ->add('name', 'text')
                ->add('cities', 'entity', array(
                    'class' => 'NexBaseBundle:City',
                    'property' => 'name',
                    'placeholder' => 'Choose an option',
                ))
                ->getForm();

我希望使用Twig添加一个占位符,对于我可以像这样使用attr的简单字段:

{{ form_widget(form.name, {'attr': {'placeholder': 'My placeholder'} }) }}

我试过这个但没有运气:

{{ form_widget(form.cities, {'attr': {'placeholder': 'Choose your city'} }) }}

3 个答案:

答案 0 :(得分:3)

你不能因为"选择框"在html5上没有属性"占位符",您的属性"占位符"在你的formbuilder中可以选择 empty_value

https://github.com/symfony/symfony/issues/5791

答案 1 :(得分:1)

在createFormHandler上,它是empty_data选项。您可以使用placeholder选项,但可能会在较旧的浏览器中遇到麻烦。

通常我禁用HTML5功能并使用Javascript执行此操作。

http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html

这是一个很酷的jQuery插件,用于修复旧浏览器中的问题。

设置控制器的值并不是真的有意义。您可以在表单中设置密钥并进行翻译。

您只能在文本字段中添加属性。 Selext-Box上的第二种方法无效,因为该元素上没有属性占位符。因此,您可以在FormType中使用占位符,但在背景中将其更改为选项字段。

答案 2 :(得分:0)

以下是我当前添加占位符的示例(我的选择列表可能与您的不同,但您可以使用此代码段):

{% form_theme cart_form _self %}

{% block choice_widget %}
    {% if form.vars.choices is defined %}
        {% for choices in form.vars.choices %}
            <div class="row">    
                <div class="col-md-6">
                    <select name="{{ form.vars.full_name }}" class="form-control">
                        <option value="__none">--Choose</option>
                        {% for choice in choices %}
                            <option value="{{ choice.value }}">{{ choice.label }}</option>
                        {% endfor %}
                    </select>
                </div>
            </div>
        {% endfor %}
    {% endif %}
{% endblock %}