2013-02-20 2 views
4

Я хотел бы заменить:Ярлыки с Symfony2 Twig формы: form_widget

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

By:

{{ form.name|field('Nom') }} 

Как я могу это сделать? Я пытался сделать это в расширении Twig, но у меня нет доступа к функции form_widget.

Edit: Я мог бы сделать это с form.name свойствами (которые включают в себя родительскую форму), но я бы повторить код Symfony, это было бы очень некрасиво большой хак

ответ

2

делает больше смысла, если вы спросите меня переместить Attr в форму класса:

class SomeForm extends AbstractType { 
     //..... 
     $builder->add('name', 'text', array('attr' => array('placeholder'=>'Nom'))); 
} 

Так как я думаю, вам потребуются некоторые пользовательские рендеринга для некоторых из ваших полей, которые вы можете проверить:

http://symfony.com/doc/2.0/cookbook/form/form_customization.html#how-to-customize-an-individual-field

Вы также можете создать новый тип и настроить его, как описано здесь:

http://symfony.com/doc/2.0/cookbook/form/form_customization.html#what-are-form-themes

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

{% block text_widget %} 
    {% set type = type|default('text') %} 
    <input type="text" {{ block('widget_attributes') }} value="{{ value }}" /> 
{% endblock field_widget %} 

{% block widget_attributes %} 
    {% spaceless %} 
    {% for attrname,attrvalue in attr %}{{attrname}}="{{attrvalue}}" {% endfor %} placeholder="{{ label|trans }}" 
    {% endspaceless %} 
{% endblock widget_attributes %} 

{% block form_row %} 
    {% spaceless %} 
    <div class="my-class"> 
     {{ form_errors(form) }} 
     {{ form_widget(form) }} 
    </div> 
    {% endspaceless %} 
{% endblock form_row %} 

Таким образом, вы бы ограничивать себя form_row (form.name) с помощью тематизации, что обеспечивает Symfony. Приближение Symfony выглядит «очень» DRY/DIE для меня. Надеюсь, это поможет.

Смежные вопросы