2014-01-30 52 views
2

我有2个实体:Projects和Categories。我在这两者之间有一个ManyToMany关系。 该类别与实体“行业”有许多关系 此时,项目和行业之间没有直接关系,我希望保持这样的状态,以便进一步搜索功能。所以在类别表中,列表包括来自所有行业的类别。Symfony/twig中的分组复选框

当我构建表单以编辑项目(使用表单小部件)时,我有一个复选框列表,代表了我的分类表中列出的所有类别。

我想按行业分组。这只能在表单布局上完成?我怎样才能从树枝窗体数据中提取行业价值,并通过行业实体对复选框进行分组?

回答

3

感谢Leevi,

我找不到如何实现上述使用行业和类别相关实体的建议...我终于找到了这种方式解决这个问题,告诉我是否有一个更简单的方法,但现在这个工作很完美。

这是我在控制器形式

$form = $this->createFormBuilder($project) 
      ->add('categories', 'entity', array(
       'class' => 'ACMEProjectBundle:Category', 
       'property' => 'name', 
       'expanded' => true, 
       'multiple' => true, 
       ->getForm(); 

我也传递给渲染形式产业阵列,每个具有相关的类别的列表

$industries = $this->getDoctrine()->getManager()->getRepository('ACMEProjectBundle:Industry')->findall(); 

在形式.html.twig模板

 {{ form_errors(form) }} 
     <form method="post" {{ form_enctype(form) }}> 
     {% for industry in industries %} 
      <h4>{{industry.name}}</h4> 
      <ul class="unstyled"> 
       {% for category in industry.categories %} 
        {% set key = category.id %} 
        <li>{{ form_widget(form.categories[key]) }}{{category.name}}</li> 
       {% endfor %} 
      </ul> 
     {% endfor %} 
     {{form_rest(form)}} 

哪给了我想要的结果。

+0

这是一个救星!非常感谢您的分享。 – pid

2

希望这将是足够的方向,而不给你确切的代码示例:)。

你必须设置你的形式展开,多个实体,像这样现场:

参见:http://symfony.com/doc/current/reference/forms/types/entity.html#group-by

<?php 

// src/Acme/ProjectBundle/Controller/DefaultController.php 
namespace Acme\ProjectBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Acme\ProjectBundle\Entity\Project; 
use Symfony\Component\HttpFoundation\Request; 

class DefaultController extends Controller 
{ 
    public function newAction(Request $request) 
    { 
     // create a project and give it some dummy data for this example 
     $project = new Project(); 

     $form = $this->createFormBuilder($project) 
      ->add('categories', 'entity', array(
       'expanded' => true, 
       'multiple' => true, 
       'group_by' => 'industry.title' 
      )) 
      ->add('save', 'submit') 
      ->getForm(); 

     return $this->render('AcmeProjectBundle:Default:new.html.twig', array(
      'form' => $form->createView(), 
     )); 
    } 
} 

的GROUP_BY参数组基于属性路径上的选项

现在group_by呈现一个选择标记,但你应该能够覆盖自定义主题或在模板中手动。

鉴于上面的表格,您可以访问{{ form.categories.vars.choices }}中的选项并手动迭代它们。

请参阅:{% block choice_widget_collapsed %}form_div_layout.html.twig以查看选择框的呈现方式。

这里的形式主题化的一些信息:http://symfony.com/doc/current/cookbook/form/form_customization.html

+0

另请参阅:http://stackoverflow.com/questions/13622586/grouping-checkboxes-in-symfony2 –

+0

谢谢M.格雷厄姆,我会试试这个。 – user3251285