请问使用form_widget()渲染表单
我使用form_widget(form.name)
大概渲染出来的input如下
<input type="text" id="shop_adminbundle_menu_name" name="shop_adminbundle_menu[name]" required="required" maxlength="255" value="admin_menu">
这个时候,因为我有自带的css样式
对于像bootstrap 这种完整的后台模版,如果使用在外面加一个p 来做class的话
量太大了
请问我怎么才能重写这个form_widget 渲染出来的 attr
我看了vendor 里的form_p_layout.html.twig 这个页面里的
widget_attributes 这个block
但是我不可能去修改这个把,请给一个办法,谢谢
可以使用 form_theme
详细参考 How to Customize Form Rendering
可以渲染自己的form_p_layout.html.twig
考虑到你的前台和后台css主题不一样 给你一种方案 使用 compass 来修改不同bundle内的 form_p_layout.html.twig:
比如AcmeDemoBundle 在你的Acme\Bundle\DemoBundle\DependencyInjection\Compiler ( 创建目录 Compiler )目录下创建 TwigFormPass.php :
$resources[] = 'AcmeDemoBundle::form/form_p_layouts.html.twig';
这一行给你的TwigExtension更新了form_p_layout.html.twig
这样你在bundle中渲染的form_widget都会来自于
Acme\Bundle\DemoBundle\Resources\views\form\form_p_layouts.html.twig
然后添加CompilerPass :
在你的
Acme\Bundle\DemoBundle\AcmeDemoBundle.php中加入 build(ContainerBuilder $builder)方法使compiler生效:
最后创建form_theme:
Acme\Bundle\DemoBundle\Resources\views\form\form_p_layouts.html.twig 里面包含了一些form_widget跟form_row , widget attribute视情况加 :
最后在Twig中试试你的 {% form( form ) %}