问题的背景:
我创建了一个symfony表单。
每个工具都有一个模块集合。
用户拥有任何工具的模块集合。
我想要的:
我想为每个工具有对应的工具的模块复选框。该用户拥有的模块复选框被选中。
- ([] = checkbox)*
工具1:[]模块1 [x]模块2 [x]模块3
工具2:[]模块4 [x]模块5
工具3:[x]模块6 []模块7
我目前拥有的:
对于每个工具,都有对应于工具模块的复选框。但是我在勾选用户模块的复选框时遇到了问题。我在数据参数上得到了一个错误。
表单字段:
$user = $options['user'];
$tools = $options['tools'];
foreach ($tools as $tool) {
$name = 'profile_'.str_replace(array('-', ' ', '.'), '', $tool->getLibelle());
$builder
->add($name, ChoiceType::class, [
'label' => $tool->getLibelle(),
'choices' => $tool->getModules(),
'choice_value' => 'id',
'choice_label' => function (?Module $module) {
return $module ? $module->getName() : '';
},
'data'=> $user->getModules(), // ERROR HERE
'expanded' => true,
'multiple' => true,
'mapped'=>false
])
;
}
[...]
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => User::class,
'user'=> null,
'category'=> null,
'tools'=> null,
]);
}
错误:
我的问题:
为什么会出现这个错误?如何正确使用数据参数来达到预期的效果?
2条答案
按热度按时间q1qsirdb1#
你在很好的方式,尝试转储什么是$user->getModules()返回,它必须是一个数组。可能是不是返回一个数组,检查TE关系。
我做了一个小测试,它工作得很好。
91zkwejq2#
在我看来,$user->getModules()返回一个集合。我设法找到了另一个解决方案,并且有效(我将字段的类型更改为MyType)
ChoiceType:数据参数需要数组
数据类型:需要采集的数据参数