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

时间:2013-07-21 06:35:54

标签: symfony twig symfony-forms fosuserbundle

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

    {{ form_widget(form.username, { 'attr': {'class': "span12",
        'placeholder': "Username"} }) }}

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

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

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

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

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

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

谢谢,

5 个答案:

答案 0 :(得分:28)

在Twig中,您不应将{{放在{{内({%也一样);把它想象成php标签。

以下内容应该有效

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

OR

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

答案 1 :(得分:6)

对于Symfony 3.x,4.x

添加占位符(或任何属性)的另一种方法是将 options-array 传递给包含另一个的表单$builder数组attr ,其中属性为键值对。

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

答案 2 :(得分:0)

您还可以将其添加到表单定义中,如下所示:

<form id   = "uploadForm"
     enctype   = "multipart/form-data"
     action    = "/api/uploadfile"
     method    = "post">
<input type="file" name="fileUpload"/>
<input type="submit" value="Upload File" name="submit">
</form>

答案 3 :(得分:0)

您也可以在树枝中以这种方式翻译(使用symfony4): 在窗体占位符中,将这样写:

{'attr':{'placeholder': "Text to translate"}}

至于html wich中的占位符应这样写,您可以这样翻译:

<input placeholder="{{"Text to translate"|trans }}">

答案 4 :(得分:0)

如果要在form-type中(而不是在模板中)设置占位符,则必须在attr选项内设置占位符。例如:

->add('search', TextType::class, ['attr' => ['placeholder' => 'form.custom.placeholder']])

要在后台翻译占位符,必须adjust the form-theme。 在我们的情况下,我们只想在表单类型中显式设置translation_domain时触发自动翻译。这就是我们实现自动翻译的方式:

{% block form_widget_simple -%}
    ....
    {% if attr.placeholder|default and translation_domain|default %}
        {%- set attr = attr|merge({placeholder: (attr.placeholder|trans({}, translation_domain))|trim}) -%}
    {% endif %}
    ....
{{- parent() -}}
{%- endblock form_widget_simple %}

如果您想始终触发自动翻译。这应该起作用:

{% block form_widget_simple -%}
    ....
    {%- set attr = attr|merge({placeholder: (attr.placeholder|default|trans({}, translation_domain))|trim}) -%}
    ....
{{- parent() -}}
{%- endblock form_widget_simple %}