我将一些Sf2表单类型迁移到Sf3中,没有任何问题.但这件事给我带来了麻烦。
class StaticEntityType extends AbstractType
{
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
[
'function' => 'getAll',
'choice_label' => 'name',
'group_by' => null,
'choice_list' => function (Options $options) {
return new ObjectChoiceList(
call_user_func(array($options['class'], $options['function'])),
$options['choice_label'],
$options['preferred_choices'],
$options['group_by'],
'id'
);
}
]
);
$resolver->setRequired('class');
$resolver->setDefined(['function', 'choice_label', 'group_by']);
}
public function getParent()
{
return 'choice';
}
public function getName()
{
return 'static_entity';
}
}选项列表应该相对于选项"class“和"function”创建,如下所示:
$formBuilder->add('myField', StaticEntityType::class, ['class' => '\Path\To\MyStaticEntity', 'function' => 'getAll'])但是,由于choice_list选项和ObjectChoiceList不再存在,我不知道该如何做。
医生说,我们要么提供“选择”,要么提供“选择加载器”。但是“选择”不接受闭包,“choice_loader”不接收表单选项列表。
任何帮助都是欢迎的。
发布于 2016-04-13 20:22:32
我想我终于找到解决办法了!
实际上,OptionResolver类允许设置规范化器,在获得选项时将在运行时调用它。
因此,我删除了choice_list选项,而不是添加choices选项,而是添加了一个规范化器:
$resolver->setNormalizer(
'choices',
function (Options $options) {
return call_user_func([$options['class'], $options['function']]);
}
);发布于 2016-04-12 21:57:31
如迁移指南所述
Symfony\Component\Form\Extension\Core\ChoiceList\ObjectChoiceList类已被删除,以支持Symfony\Component\Form\ChoiceList\ArrayChoiceList。
和
删除了
choice_list选项ChoiceType。
只需使用choice。
因此,请尝试如下:
$resolver->setDefaults(
[
'function' => 'getAll',
'choice_label' => 'name',
'group_by' => null,
'choice' => function (Options $options) {
return new ArrayChoiceList(
call_user_func(array($options['class'], $options['function'])),
$options['choice_label'],
$options['preferred_choices'],
$options['group_by'],
'id'
);
}
]
);文档中的其他资源。
希望能帮上忙
https://stackoverflow.com/questions/36583441
复制相似问题