在Symfony2表单输入中设置带有转换的占位符属性

Ami*_*uli 13 symfony-forms symfony twig fosuserbundle

我正在使用FOSUserBundle来管理我的用户.为了注册用户,我重用了满足我需求的包的形式.不过,我需要设置我的字段的一些属性.这是通过像这样的小枝很容易做到的:

    {{ form_widget(form.username, { 'attr': {'class': "span12",
        'placeholder': "Username"} }) }}
Run Code Online (Sandbox Code Playgroud)

现在,我的目标是在占位符上进行自动翻译,因此我提出了以下代码:

    {{ form_widget(form.username, { 'attr': {'class': "span12",
        'placeholder': "{{'security.login.usernameplaceholder'|trans}}"} }) }}
Run Code Online (Sandbox Code Playgroud)

此前代码生成的输入占位符值等于{{'security.login.usernameplaceholder'| trans}}

为了摆脱这个问题,我尝试为此设置变量,但symfony产生了错误!

    {% set usernameplaceholder = {{'security.login.usernameplaceholder'|trans}} %}
    {{ form_widget(form.username, { 'attr': {'class': "span12",
        'placeholder': usernameplaceholder} }) }}
Run Code Online (Sandbox Code Playgroud)

有什么建议可以解决这个问题吗?

谢谢,

Tho*_*ire 29

在嫩枝,你不应该把{{{{(同为{%); 把它想象成php标签.

以下应该有效

{% set usernameplaceholder = 'security.login.usernameplaceholder'|trans %}
{{ form_widget(form.username, { 'attr': {'class': "span12",
    'placeholder': usernameplaceholder} }) }}
Run Code Online (Sandbox Code Playgroud)

要么

{{ form_widget(form.username, { 'attr': {'class': "span12",
    'placeholder': 'security.login.usernameplaceholder'|trans} }) }}
Run Code Online (Sandbox Code Playgroud)


Nik*_*hak 6

对于Symfony 3.x,4.x

添加占位符(或任何属性)的另一种方法是将options-array传递给$builder包含另一个Arrayattr的表单,该Array包含属性作为键值对.

// The parameters are column name, form-type and options-array respectively.
$builder->add('field', null, array(
            'attr' => array(
                 'placeholder' => 'support.contact.titleplaceholder'
             )
        ));
Run Code Online (Sandbox Code Playgroud)