Symfony2 передает значения в тип коллекции

У меня есть следующие отношения с сущностями:

  • Клиент имеет адрес один-ко-многим
  • Адрес имеет много-к-одному графство и много-к-одному городу
  • У округа есть один-ко-многим городом.

Итак, в моем CustomerType, у меня есть

public function buildForm(FormBuilderInterface $builder, array $options) { $builder ... ->add('addresss', 'collection', array( 'label' => 'customer.address', 'type' => new AddressType(), 'allow_add' => true, 'allow_delete' => true, 'by_reference' => false, )) ; } 

И в моем AddressType у меня есть

 public function buildForm(FormBuilderInterface $builder, array $options) { $builder ... ->add('city', 'entity', array( 'class' => 'MyCustomerBundle:City', 'query_builder' => function(CityRepository $cr) use ($options) { return $cr->getCityQB($options['county']); }, 'property' => 'city', 'empty_value' => '', )) ; } 

Моя цель – отобразить только набор городов для соответствующего округа. Я могу получить значения в CustomerType из $ options, но как передать значения в AddressType? Чтобы каждый адрес получал соответствующее графство, чтобы искать города?

Любая помощь будет оценена по достоинству. Благодаря!

Используйте конструктор в AddressType, его работы для меня ..

Тип клиента:

 public function buildForm(FormBuilderInterface $builder, array $options) { $builder ... ->add('addresss', 'collection', array( 'label' => 'customer.address', 'type' => new AddressType($your_variable), 'allow_add' => true, 'allow_delete' => true, 'by_reference' => false, )) ; } 

Тип адреса:

 private $your_variable; public function __construct($variable) { $this->your_variable= $variable; } ... public function buildForm(FormBuilderInterface $builder, array $options){ $your_variable = $this->your_variable; 'query_builder' => function(CityRepository $cr) use ($your_variable) { return $cr->getCityQB($your_variable); }, } 

в symfony3:

 $builder->add('example', CollectionType::class, array( 'entry_type' => ExampleType::class, 'entry_options' => array( 'my_custom_option' => true), )); 

Я думаю, вы могли бы использовать опцию «options» для типа коллекции. Это лучше, чем использование конструктора в случае, если вы хотите повторно использовать форму в другом месте.

Справка по форме Symfony: Тип коллекции

Но не забудьте определить переменную в методе setDefaultOptions . (Обе формы должны иметь это)