2014-12-26 2 views
2

Использование PHP на стороне контроллера, я могу добавить заполнитель в моей области, используя createFormBuilder():Заполнитель для выбора form_widget на Twig

$form = $this->createFormBuilder($company) 
       ->add('name', 'text') 
       ->add('cities', 'entity', array(
        'class' => 'NexBaseBundle:City', 
        'property' => 'name', 
        'placeholder' => 'Choose an option', 
       )) 
       ->getForm(); 

Я ищу, чтобы добавить заполнитель, используя Twig для простых полей я можно использовать Attr, как это:

{{ form_widget(form.name, {'attr': {'placeholder': 'My placeholder'} }) }} 

Я попытался с этим, но не повезло:

{{ form_widget(form.cities, {'attr': {'placeholder': 'Choose your city'} }) }} 

ответ

3

Вы ча не потому, что «выберите поле» на html5 не имеет атрибут «заполнитель», ваш атрибут «заполнитель» в вашем formbuilder является альтернативой EMPTY_VALUE

https://github.com/symfony/symfony/issues/5791

+0

http://symfony.com/doc/ current/reference/forms/types/entity.html # placeholder – Stony

+0

Я знаю, я говорю, что «placeholder» не существует в html5 для «select box», в symfony2 «placholder» - это «пустое значение», которое преобразуется в HTML to:

+0

Хорошо, но как я могу настроить его с помощью Twig!? – ImadT

1

На createFormHandler сво empty_data вариант. Вы можете использовать опцию placeholder, но возможно, что у вас возникли проблемы с более старыми браузерами.

Обычно я отключу эту функцию HTML5 и выполняю ее с помощью Javascript.

http://www.hagenburger.net/BLOG/HTML5-Input-Placeholder-Fix-With-jQuery.html

Вот прохладный JQuery плагин, чтобы исправить эту проблему в более старых браузерах.

Установка значения с вашего контроллера не имеет смысла. Вы можете установить ключ в своей форме и перевести их, например.

Вы можете добавить атрибут только в текстовые поля. Ваш второй метод в Selext-Box не работает, потому что нет атрибута placeholder на этом элементе. Таким образом, вы можете использовать placeholder в вашем FormType, но в фоновом режиме это поле изменяется.

+0

Вы указали на некоторые интересные случаи в своем ответе, но не видите, как я могу настроить значение по умолчанию в моем поле выбора. Действительно, когда я помещаю его с помощью formbuilder он работает, но, как вы сказали, нет смысла размещать его на контроллере. – ImadT

0

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

{% form_theme cart_form _self %} 

{% block choice_widget %} 
    {% if form.vars.choices is defined %} 
     {% for choices in form.vars.choices %} 
      <div class="row">  
       <div class="col-md-6"> 
        <select name="{{ form.vars.full_name }}" class="form-control"> 
         <option value="__none">--Choose</option> 
         {% for choice in choices %} 
          <option value="{{ choice.value }}">{{ choice.label }}</option> 
         {% endfor %} 
        </select> 
       </div> 
      </div> 
     {% endfor %} 
    {% endif %} 
{% endblock %} 
Смежные вопросы