7

我有以下实体关系:

  • 客户有一对多地址
  • 一个地址具有多对一的县和多对一的城市
  • 一个县有一对多的市。

所以,在我的 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' => '',
        ))
    ;
}

我的目标是只显示相应县的城市集。我可以将值从 $options 获取到 CustomerType,但是如何将值传递给 AddressType?这样每个地址都有对应的县来查找城市吗?

任何帮助,将不胜感激。谢谢!

4

3 回答 3

8

在 symfony3 中:

$builder->add('example', CollectionType::class, array(
    'entry_type'   => ExampleType::class,
    'entry_options'  => array(
        'my_custom_option'  => true),
));
于 2017-02-24T17:29:07.330 回答
4

使用 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);
    },
}
于 2013-06-20T20:50:23.920 回答
3

我认为您可以使用集合类型的“选项”选项。如果您想在其他地方重用表单,这比使用构造函数要好。

Symfony 表单参考:集合类型

但请记住在您的setDefaultOptions方法中定义变量。(两种形式都必须有)

于 2013-11-26T23:13:22.063 回答