发布于 1970-01-01 08:00
  • 1 个回答
    • 可以使用 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 :

      <?php
      
      namespace 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 );
          }
      }
      

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

      <?php
      
      namespace Acme\Bundle\DemoBundle;
      
      use Acme\Bundle\DemoBundle\DependencyInjection\Compiler\MenuRenderPass;
      use Acme\Bundle\DemoBundle\DependencyInjection\Compiler\TwigFormPass;
      use Symfony\Component\DependencyInjection\ContainerBuilder;
      use Symfony\Component\HttpKernel\Bundle\Bundle;
      
      
      class StoreBackendBundle extends Bundle
      {
      
          public function build( ContainerBuilder $container)
          {
      
              $container->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 -%}
      
      
      <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 {{ block('button_attributes') }} 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') -%}
          <input {{ block('widget_attributes') }} class="form-control" type="{{ type }}" {% if value is not empty %}value="{{ value }}" {% endif %}/>
      
      {%- endblock form_widget_simple %}
      
      {% block textarea_widget -%}
          <textarea  class="form-control" {{ block('widget_attributes') }}>{{ value }}</textarea>
      {%- endblock textarea_widget %}
      

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

      2022-12-01 19:02 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有