Reputation: 9528
I have the following entity relations:
So, in my CustomerType, I have
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,
))
;
}
And in my AddressType, I have
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' => '',
))
;
}
My goal is to only display the set of cities for their corresponding county. I can get the values into CustomerType from $options but how can I pass down the values to AddressType? So that each address gets its corresponding county to look up the cities?
Any help would be appreciated. Thanks!
Upvotes: 7
Views: 10592
Reputation: 659
in symfony3 :
$builder->add('example', CollectionType::class, array(
'entry_type' => ExampleType::class,
'entry_options' => array(
'my_custom_option' => true),
));
Upvotes: 8
Reputation: 304
I think you could use the 'options' option of the collection type. It's better than using the constructor in case you want to reuse the form elsewhere.
Symfony Form Reference: Collection Type
But remember to define the variable in your setDefaultOptions
method. (Both forms must have it)
Upvotes: 3
Reputation: 3277
Use the constructor in AddressType, its works for me..
CustomerType:
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,
))
;
}
AddressType:
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);
},
}
Upvotes: 4