請問使用form_widget()渲染表單
我使用form_widget(form.name)
大概渲染出來的input如下
這個時候,因為我有內建的css樣式
對於像bootstrap 這種完整的後台模版,如果使用在外面加一個div 來做class的話
量太大了
請問我怎麼才能重寫這個form_widget 渲染出來的 attr
我看了vendor 裡的form_div_layout.html.twig 這個頁面裡的
widget_attributes 這個block
但是我不可能去修改這個把,請給一個辦法,謝謝
回複內容:
請問使用form_widget()渲染表單
我使用form_widget(form.name)
大概渲染出來的input如下
這個時候,因為我有內建的css樣式
對於像bootstrap 這種完整的後台模版,如果使用在外面加一個div 來做class的話
量太大了
請問我怎麼才能重寫這個form_widget 渲染出來的 attr
我看了vendor 裡的form_div_layout.html.twig 這個頁面裡的
widget_attributes 這個block
但是我不可能去修改這個把,請給一個辦法,謝謝
可以使用 form_theme
詳細參考 How to Customize Form Rendering
可以渲染自己的form_div_layout.html.twig
考慮到你的前台和後台css主題不一樣 給你一種方案 使用 compass 來修改不同bundle內的 form_div_layout.html.twig:
比如AcmeDemoBundle 在你的Acme\Bundle\DemoBundle\DependencyInjection\Compiler ( 建立目錄 Compiler )目錄下建立 TwigFormPass.php :
getParameter('twig.form.resources'); $resources[] = 'StoreBackendBundle::form/form_div_layouts.html.twig'; $container->setParameter( 'twig.form.resources' , $resources ); }}
$resources[] = 'AcmeDemoBundle::form/form_div_layouts.html.twig';
這一行給你的TwigExtension更新了form_div_layout.html.twig
這樣你在bundle中渲染的form_widget都會來自於
Acme\Bundle\DemoBundle\Resources\views\form\form_div_layouts.html.twig
然後添加CompilerPass :
在你的
Acme\Bundle\DemoBundle\AcmeDemoBundle.php中加入 build(ContainerBuilder $builder)方法使compiler生效:
addCompilerPass( new TwigFormPass() ); //add more compiler ... }}
最後建立form_theme:
Acme\Bundle\DemoBundle\Resources\views\form\form_div_layouts.html.twig 裡麵包含了一些form_widget跟form_row , widget attribute視情況加 :
{% block form_row -%} {{- form_errors(form) -}} {{- form_label(form) -}} {{- form_widget(form) -}} {%- endblock form_row %}{% block submit_widget -%} {% set type = type|default('submit') %} {{- block('button_widget') -}}{%- endblock submit_widget %}{% block button_widget -%} {% if label is empty -%} {% set label = name|humanize %} {%- endif -%} {{ label|trans({}, translation_domain) }}{%- endblock button_widget %}{% block form_widget_simple -%} {% set type = type|default('text') -%} {%- endblock form_widget_simple %}{% block textarea_widget -%} {{ value }}{%- endblock textarea_widget %}
最後在Twig中試試你的 {% form( form ) %}