2014-01-30 6 views
2

У меня есть 2 объекта: Проекты и категории. У меня есть отношение ManyToMany между этими двумя. Категории имеют отношение ManytoOne к сущности «индустрия» В настоящий момент нет прямых связей между проектами и отраслью, и я хотел бы сохранить это так, для дальнейшего поиска. Поэтому в таблице категорий список включает категории из всех отраслей.Сгруппированные флажки в 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 template

 {{ 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

Надеюсь, этого будет достаточно, чтобы вы не указали точные примеры кода :).

Вы должны настроить свою форму с расширенной, несколько сущностей области, как так:

<?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 групп варианты, основанные на пути свойства:

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

Теперь group_by отображает тэг select, но вы можете переопределить его с помощью настраиваемой темы темы или вручную в шаблоне.

С учетом формы выше вы можете получить доступ к выбору в {{ 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

Спасибо М. Грэм, я попробую это. – user3251285

Смежные вопросы