Установка атрибута placeholder с переводом на вход формы Symfony2

Я использую FOSUserBundle для управления моими пользователями. Чтобы зарегистрировать пользователя, я снова использовал форму пакета, которая соответствует моим потребностям. Тем не менее, мне нужно было установить некоторые атрибуты моих полей. Это было сделано легко с помощью twig, как это:

    {{ 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} }) }}

Есть ли предложение решить эту проблему?

Спасибо,

Ответ 1

В 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} }) }}

Ответ 2

Для 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'
             )
        ));

Ответ 3

Вы также можете добавить его в свое определение формы следующим образом:

    $builder
        ->add('information', 'textarea', array(
            'label' => false,
            'required' => true,
            'constraints' => [
                new NotBlank()
            ],
            'placeholder' => 'support.contact.titleplaceholder',
        ));

Ответ 4

Вы также можете перевести этот способ (используя symfony4) в веточку: в форме заполнителя, который будет написан так:

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

Что касается заполнителя в html, который будет написан так, вы можете перевести это так:

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