2015-02-01 6 views
1

В моем приложении мне нужно отобразить группу флажков, с помощью которых пользователь может указать определенные параметры. В моем случае это относится к «зонам», то есть к зонам A, зоне B, зоне C и т. Д.Symfony 2/Twig и коллекция флажков

Проблема, с которой я столкнулся, заключается в том, как построить это в моем классе типа формы, используя FormBuilderInterface, предоставляемый инфраструктурой ,

Документация относится к типу «коллекции» [1], который кажется мне необходимым, но у меня возникли проблемы со связью элемента флажка [2]. Документация только, кажется, дает пример для одного флажка, но мне нужна его для группы.

Это то, что я до сих пор (я ушел из других полей для краткости):

class FormType extends AbstractType { 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
    $builder 
     ->add('zones', 'collection', 
     array(
      'type' => 'checkbox', 
      'options' => array(
      'zone-a' => 'Zone A', 
      'zone-b' => 'Zone B', 
      'zone-c' => 'Zone C', 
     ) 
     ) 
    ) 
    ; 
    } 

} 

и класс данных (модель формы, если вы будете):

class FormData { 

    protected $zones = []; 

    public function __construct(array $zones = NULL) 
    { 
    if(! empty($zones)) 
    { 
     $this->setZones($zones); 
    } 
    } 

    public function getZones() 
    { 
    return $this->zones; 
    } 

    public function setZones($zones) 
    { 
    $this->zones = $zones; 
    } 

} 

Это, как я визуализации элемент формы (на данный момент):

{{ form_row(form.zones) }} 

Тем не менее, выше, выдает только метку с именем зоны и nothi ng else.

Как правильно отобразить группу/коллекцию флажков в приложении Symfony 2/Twig?

[1] http://symfony.com/doc/current/reference/forms/types/collection.html [2] http://symfony.com/doc/current/reference/forms/types/checkbox.html

ответ

1

Вам понадобится второй FormType.

Первая форма, которую вы вызываете должны выглядеть примерно так:

$builder 
    ->add('zones', 'collection', 
    array(
     'type' => new FormDataType(), 
     'options' => array(
     ..... 
    ) 
    ) 
) 

И тогда вторая форма должна выглядеть следующим образом:

class FormDataType extends AbstractType { 
... 
    $builder 
     ->add('checkBox1', 'checkbox', ...) 
     ->add('checkBox2', 'checkbox', ...) 
     .... 
} 

Я просто писал, так что я могу не скажите, будет ли это работать ... но это тот подход, который вам нужно будет сделать, я уже сделал что-то подобное в одном из своих проектов.