Symfony -表单上的数据参数出错

byqmnocz  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(134)

问题的背景:

我创建了一个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,
    ]);
}

错误:

我的问题:

为什么会出现这个错误?如何正确使用数据参数来达到预期的效果?

q1qsirdb

q1qsirdb1#

你在很好的方式,尝试转储什么是$user->getModules()返回,它必须是一个数组。可能是不是返回一个数组,检查TE关系。
我做了一个小测试,它工作得很好。

$name = 'name_field';
$builder->add($name,ChoiceType::class, array(
    'choices' => array('Yes', 'No'),
    'data' => array('Yes', false),
    'mapped' => false,
    'expanded' => true,
    'multiple' => true
));
91zkwejq

91zkwejq2#

在我看来,$user->getModules()返回一个集合。我设法找到了另一个解决方案,并且有效(我将字段的类型更改为MyType)

foreach ($tools as $tool) {
            $name = 'acces_'.str_replace(array('-', ' ', '.'), '', $tool->getLibelle());
            $builder
                ->add($name, EntityType::class, [
                    'class'=> Module::class,
                    'label' => $tool->getLibelle(),
                    'data' => $user->getModules(),
                    'choices'=> $tool->getModules(),
                    'choice_value' => 'id',
                    'choice_label' => 'name',
                    'expanded' => true,
                    'multiple' => true,
                    'required' => true,
                    'mapped'=>false,
                ])
            ;
        }

ChoiceType:数据参数需要数组
数据类型:需要采集的数据参数

相关问题