Symfony2中选择:类型“标量”的预期的说法,“阵列”给定(Symfony2 Choice :

2019-07-30 04:43发布

我正在做一个选择列表的形式。 这是我的FormType(仅作为测试)的内容:

$builder->add('regionUser');
$builder->add('roles' ,'choice' ,array('choices' => array(
        "ROLE_ADMIN" => "ROLE_ADMIN",
            "ROLE_USER" => "ROLE_USER",
        ),
        'required'  => true,
        'multiple' => false,
));

当我执行,我得到了以下错误:

类型“标量”的期望的参数,“阵列”给定

错在何处? 如何解决呢?

Answer 1:

有3个解决方案:

  1. 使用多种选择现场展示的作用领域。 多选择返回一个数组。

  2. 在您的形式,不显示“角色”字段。 把一个新的领域“角色”只有在你的buildform,不是在你的实体。 (您可以填写与角色层次autmaticaly,如果你想)。 在的onSuccess方法,获得了“角色”,设置角色的用户。

$用户> addRole($角色);

  1. 当你创建你的用户类,不要使用从FOSUserBundle的所述用户接口。 复制它,改变方法的原型。

// FOSUserBundle /用户界面

功能setRoles(数组$角色);

 // YourUserBundle/UserInterface function setRoles($roles); 

并更改方法在你的用户类别

 // FOSUserBundle/UserInterface public function setRoles(array $roles) { $this->roles = array(); foreach ($roles as $role) { $this->addRole($role); } } // YourUserBundle/UserInterface public function setRoles($roles) { if (is_string()) { $this->addRole($roles); } else { $this->roles = array(); foreach ($roles as $role) { $this->addRole($role); } } } 

你可以在这里找到更多的信息: https://groups.google.com/group/symfony2/browse_thread/thread/3dd0d26bcaae4f82/4e091567abe764f9

http://blog.aelius.fr/blog/2011/11/allow-user-to-choose-role-at-registration-in-symfony2-fosuserbundle-2/

https://github.com/FriendsOfSymfony/FOSUserBundle



文章来源: Symfony2 Choice : Expected argument of type “scalar”, “array” given