2015-11-09 3 views
0

У меня есть тип формы, как следующее:Объединение полей Symfony2

class TestType extends AbstractType{ 

    public function buildForm(FormBuilderInterface $builder, $options){ 
    $builder->add('type', 'text'); 
    $builder->add('name', 'text'); 
    } 
} 

Теперь я хочу, чтобы создать тип формы, который имеет два TestType с в нем, но только один 'type' поле, которое используется для обоих в TestType поле, используемое в нем:

class DoubleTestType extends AbstractType{ 

    public function buildForm(FormBuilderInterface $builder, $options){ 
    $builder->add('first', new TestType()); 
    $builder->add('second', new TestType()); // however this will create one type 'field' for each of the SubForms 
    } 
} 

Такой подход создаст два TestType с, каждый из которых имеет индивидуальный 'type' поля, но я хочу 'type' поля делится между ними. Один из подходов состоит в том, чтобы создать поле 'type' в DoubleTestType и сделать поле type в TestType s скрытым и установить их значение с помощью прослушивателя событий, зарегистрированного на DoubleTestType. Я ищу более чистый способ сделать это.

ответ

0

Вы можете создать form field type вместо формы, а затем использовать его.


Или вы можете контролировать поле через параметры опций:

public function buildForm(FormBuilderInterface $builder, $options){ 
    $type = isset($options['type']) ? $options['type'] : false; 
    if ($type) { 
     $builder->add('type', 'text'); 
    } 
    $builder->add('name', 'text'); 

Тогда:

$builder->add('first', new TestType(array('type' => true))); 
$builder->add('second', new TestType()); 
+0

Это то, что я делаю прямо сейчас, проблема состоит в том, что поле 'TestType' имеет неявное знание своей родительской формы' DoubleTestType', которая не является чистой. – user2268997

+0

А как насчет использования пользовательского поля формы вместо формы? (первая часть моего ответа) – Srdjan

+0

Это уже настраиваемый тип поля. – user2268997

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