15

我正在使用 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} }) }}

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

谢谢,

4

5 回答 5

32

在 Twig 中,您不应该放入{{{{对于{%);将其视为 php 标签。

以下应该工作

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

或者

{{ form_widget(form.username, { 'attr': {'class': "span12",
    'placeholder': 'security.login.usernameplaceholder'|trans} }) }}
于 2013-07-21T16:28:33.467 回答
7

对于 Symfony 3.x、4.x

添加占位符(或与此相关的任何属性)的另一种方法是将选项数组$builder传递给包含另一个数组attr的表单,该数组具有作为键值对的属性。

// The parameters are column name, form-type and options-array respectively.
$builder->add('field', null, array(
            'attr' => array(
                 'placeholder' => 'support.contact.titleplaceholder'
             )
        ));
于 2017-07-07T16:37:52.033 回答
1

您也可以在 twig 中以这种方式翻译(使用 symfony4):以占位符的形式写成这样:

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

至于 html 中的占位符会这样写,你可以这样翻译:

<input placeholder="{{"Text to translate"|trans }}">
于 2019-06-06T19:59:01.267 回答
0

如果要在表单类型(而不是模板)中设置占位符,则必须在attr选项中设置占位符。例如:

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

要在后台翻译占位符,您必须调整 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 %}
于 2020-12-10T12:34:33.780 回答
-1

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

    $builder
        ->add('information', 'textarea', array(
            'label' => false,
            'required' => true,
            'constraints' => [
                new NotBlank()
            ], 
            'attr' => [
               'placeholder' => 'support.contact.titleplaceholder'
            ]
        ));
于 2016-06-02T04:42:03.953 回答