我正在构建一个从“EntityType”扩展的自定义表单字段类型。我总是想根据传递的选项返回元素的子集。
在我的类型中:
$builder->add('Categories','choice_category', array('code'=> 'CAT1', 'multiple'=> true)) ;
我已将choice_category 声明为服务。工作正常!
bt.form.type.category:
class: My\MBundle\Form\Type\CategoryType
tags:
- { name: form.type, alias: choice_category }
在 CategoryChoiceType.php
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(
array(
'class'=> 'CmComunBundle:Comun\Nomenclador',
'code' => null,
)
);
}
public function getParent()
{
return 'entity';
}
我正在考虑使用 query_builder 选项,但我不知道如何将代码选项传递给 setDefaultOptions 方法,我在这里无法访问 $options 数组。
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(
array(
'class'=> 'CmComunBundle:Comun\Nomenclador',
'code' => null,
'query_builder' => function(\Doctrine\ORM\EntityRepository $er) use ($options['code']) {
return $er->createQueryBuilder('c')
->where('c.parent_code = :code')
->orderBy('c.name', 'ASC')
->setParameter('code', $options['code']);;
}
)
);
);