gpt4 book ai didi

Symfony 2.1 : How to pass parameter to custom form field type

转载 作者:行者123 更新时间:2023-12-04 22:06:13 24 4
gpt4 key购买 nike

我正在构建一个从“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']);;
}
)
);
);

最佳答案

您几乎做对了,但是您需要使用以下特殊语法使“query_builder”依赖于另一个选项“code”:

use Symfony\Component\OptionsResolver\Options;

$resolver->setDefaults(array(
'query_builder' => function (Options $options) {
// return default value of the "query_builder" option
// you can access $options['code'] here
},
));

所以在你的具体例子中:

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'class' => 'CmComunBundle:Comun\Nomenclador',
'code' => null,
'query_builder' => function (Options $options) {
return function(EntityRepository $er) use ($options) {
return $er->createQueryBuilder('c')
->where('c.parent_code = :code')
->orderBy('c.name', 'ASC')
->setParameter('code', $options['code']);;
};
},
));
}

这也记录在 OptionsResolver README 中。

关于Symfony 2.1 : How to pass parameter to custom form field type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13748116/

24 4 0