1

選択リストを含むフォームを作成しています。これが私の FormType の内容です(テストとしてのみ):

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

これを実行すると、次のエラーが発生します。

タイプ「スカラー」、「配列」の予期される引数が指定されました

何がうまくいかないのですか?それを解決する方法は?

4

1 に答える 1

2

3 つの解決策があります。

  1. 複数選択フィールドを使用して、役割フィールドを表示します。複数の選択肢は配列を返します。

  2. フォームでは、「役割」フィールドを表示しないでください。エンティティではなく、ビルドフォームにのみ新しいフィールド「ロール」を配置します。(必要に応じて、ロール階層を自動的に入力できます)。onSuccess メソッドで、ユーザーのロールを設定するための「ロール」を取得します。

$user->addRole( $role );

  1. ユーザー クラスを作成するときは、FOSUserBundle の UserInterface を使用しないでください。それをコピーして、メソッドのプロトタイプを変更します。

// FOSUserBundle/UserInterface

関数 setRoles(配列 $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

于 2012-06-29T17:14:56.050 に答える