2015-08-10 2 views
0

Я не знаю, как использовать блоки, определенные в bootstrap_3_horizontal_layout.html.twig, чтобы скрыть мою форму.Как использовать шаблон шаблона бутстрапа TWIG в форме Symfony2

До сих пор я делал это, и он отлично работает.

{% form_theme form 'bootstrap_3_horizontal_layout.html.twig' %} 
<div class="well"> 
    {{ form_start(form) }} 

    {{ form_errors(form) }} 

    {{ form_row(form.title, {'label': 'Titre'}) }} 

    {{ form_row(form.content, {'label': "Content"}) }} 

... 

    {{ form_rest(form) }} 
    {{ form_end(form) }} 
</div> 

Но если я попытаюсь использовать. или любой другой блок, определенный в bootstrap_3_horizontal_layout, например

{{ textarea_widget(form.content, {'label': "Content"}) }} 

Это не работает.

ответ

2

Функции, которые вы вызываете в первом примере (form_start, form_errors и т.д.) являются функции, определенные в расширении Twig (documentation), что использование заданная тема для генерации вывода. Таким образом, блоки, определенные в пределах bootstrap_3_horizontal_layout.html.twig, вызываются этими функциями (которые являются расширением компонента представления формы формы Symfony), вы не можете напрямую «вызывать» эти блоки самостоятельно.

Если вы пытаетесь настроить вывод вашей формы, самый простой способ сделать это, чтобы создать свою собственную форму тему, которая проходит от базовой темы:

{% extends 'bootstrap_3_horizontal_layout.html.twig' %} 
{% block textarea_widget %} 
    {# your code #} 
{% endblock %} 

Это описано в Symfony cookbook entry ,

Если вы пытаетесь вызвать виджет напрямую, вы лучше меняете тип поля формы, которое передается рендереру. Различные типы доступны в form documentation. Тип, который вы выбираете, определяет, какой блок будет отображаться из вашей темы, - поэтому в вашем случае, если вы измените тип поля на textarea, будет отображаться textarea_widget (ну, textarea_row). Если вам нужен общий обзор этого документа, вам должны помочь документы form fragment naming.

+0

@KaizokuGambare «Еще раз спасибо Джону Ноэлю», тогда вы должны отметить этот ответ как принятый. –

2

Благодаря Джону Ноэлу я нахожу ответ. Подводя итог, если кто-то хочет сделать то же самое.

Чтобы использовать bootstrap3 predifined макет в вашей Symfony2 формы

1 - Признаться вид тему использовать.

в шаблоне веточку

{% form_theme form 'bootstrap_3_horizontal_layout.html.twig' %} 

или глобально для всех форм в/приложение/Config/конфигурации.YML

# Twig Configuration 
twig: 
    form: 
     #resources: ['bootstrap_3_layout.html.twig'] 
     resources: ['bootstrap_3_horizontal_layout.html.twig'] 

2 - Используйте Symfony Twig Extensions для отображения вашей формы

  • форма
  • form_start
  • form_end
  • form_enctype
  • form_widget
  • form_errors
  • form_label
  • form_row
  • form_rest

3 - Вы должны использовать правильный Form Type в вашем formbuilder (это часть мне не хватало).

Ex: использовать Bootstrap 3 виджета.

В вашем form.html.twig

{% form_theme form 'bootstrap_3_horizontal_layout.html.twig' %} 

    {{ form_start(form) }} 

... 

    {{ form_row(form.price, {'label': "Price"}) }} 

... 

    {{ form_end(form) }} 

В вашем FormType

$builder->add('price', 'money'); 

Я надеюсь, что это может помочь кому-то, как это то, что я хотел, чтобы я нашел! Еще раз спасибо John Noel

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