• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

请问个关于表单渲染的问题,希望能解答一下,谢谢

php 搞代码 3年前 (2022-01-25) 17次浏览 已收录 0个评论
文章目录[隐藏]

请问使用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 :

<code><?phpnamespace Acme\Bundle\DemoBundle\DependencyInjection\Compiler;use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;use Symfony\Component\DependencyInjection\ContainerBuilder;class TwigFormPass implements CompilerPassInterface{    public function process(ContainerBuilder $container)    {        $resources = $container->getParameter('twig.form.resources');        $resources[] = 'StoreBackendBundle::form/form_div_layouts.html.twig';        $container->setParameter( 'twig.form.resources' , $resources );    }}</code>

$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生效:

<code><?phpnamespace Acme\Bundle\DemoBundle;use Acme\Bundle\DemoBundle\DependencyInjection\Compiler\MenuRenderPass;use Acme\Bundle\DemoBundle\DependencyInjection\Compiler\TwigFormPass;use Symfony\Component\DependencyInjection\ContainerBuilder;use Symfony\C<b style="color:transparent">来&源gao@dai!ma.com搞$代^码%网</b><img>搞gaodaima代码</img>omponent\HttpKernel\Bundle\Bundle;class StoreBackendBundle extends Bundle{    public function build( ContainerBuilder $container)    {        $container->addCompilerPass( new TwigFormPass() );        //add more compiler ...     }}</code>

最后创建form_theme:
Acme\Bundle\DemoBundle\Resources\views\form\form_div_layouts.html.twig 里面包含了一些form_widget跟form_row , widget attribute视情况加 :

<code>{% block form_row -%}<div class="form-group">        {{- form_errors(form) -}}        <label for="">{{- form_label(form) -}}</label>        {{- form_widget(form) -}}    </div>{%- 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 -%}    <button class="btn btn-primary" type="{{ type|default('button') }}">{{ label|trans({}, translation_domain) }}</button>{%- endblock button_widget %}{% block form_widget_simple -%}    {% set type = type|default('text') -%}    {%- endblock form_widget_simple %}{% block textarea_widget -%}    <textarea class="form-control">{{ value }}</textarea>{%- endblock textarea_widget %}</code>

最后在Twig中试试你的 {% form( form ) %}


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:请问个关于表单渲染的问题,希望能解答一下,谢谢

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址