Установка атрибута 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 }}">