У меня есть следующие отношения с сущностями:
Итак, в моем 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
. (Обе формы должны иметь это)