Symfony2选择:给出“scalar”,“array”类型的预期参数

时间:2012-06-29 12:41:37

标签: forms security symfony

我正在制作一个带有选择列表的表单。这是我的FormType的内容(仅作为测试):

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

执行此操作时,出现以下错误:

  

“scalar”类型的预期参数,“array”给出

出了什么问题?怎么解决?

1 个答案:

答案 0 :(得分:2)

有3个解决方案:

  1. 使用多个选项字段显示角色字段。多 选项返回一个数组。

  2. 在您的表单中,不要显示“角色”字段。 仅在您的构建表中放置一个新字段“角色”,而不是在您的实体中。 (如果需要,您可以使用角色层次结构自动填充它)。 在onSuccess方法中,获取“角色”来为您的用户设置角色。

  3.   

    $ user-> addRole($ role);

    1. 创建用户类时,请勿使用UserInterface FOSUserBundle。复制它并更改方法的原型。
    2.   

      // FOSUserBundle / UserInterface

           

      function setRoles(array $ roles);

      // 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