2016-04-19 5 views
1

まず、私はフランス語ですので、私は貧しい英語のためにあなたの恩赦を頼んでいます。Symfony3 - FOSUserBundle - ロールの属性

私はここに来て、私は私の最初のSymfony3プロジェクトを開始しています!私は最初の問題を抱えていました。ユーザーを管理するためにFOSUserBundleを使用したいのですが、訪問者が登録できないようにしています。私は管理者に(私はそれを行うことができると思う)ユーザーを作成するが、私はユーザー作成フォームで、管理者は、ユーザーに役割を割り当てることが必要です。 (ちょうど1つの役割)

ここに私の問題があります:この時点でSymfony3が大きく変わってしまい、解決策がもう見つからなくなりました。実際、FOSUserBundleの/ registrationにフィールドCollectionTypeを追加し、管理者が新しいユーザーを作成できるようにするために、この登録ページを/ admin/registrationの下に置きたいと思います。登録リダイレクトを変更して、管理者がフォームを使用している訪問者であるとは思わないようにします。それは良いアイデアですか?まあ、私は単に私に " - > add( 'role')のコードを与える人が必要です。 Symfony2で使われていたものとはまったく異なっています。

だから、私がしたいことのようなものです:みんなありがとう

// \FOS\UserBundle\Form\Type\RegistrationFormType.php 


$builder ->add('roles', CollectionType::class, array(
       'entry_type' => TextType::class, 
       'entry_options' => array(
        '/* CHOICES */' => array(
         /*List of Roles from security.yml*/ 
        ) 
       ) 
      ); 

答えて

2

あなたはsymfonyにおいて役割を取得するためにchoices form type

例を使用する必要があります:あなたは

// ... your function 
$user = new User(); 
$roles = $this->container->getParameter('security.role_hierarchy.roles'); 
$myForm = $this->createForm(new UserType($roles), $user); 

$builder->add('roles', 'choice', array(
     'choices' => $this->flattenArray($this->roles), 
)); 

// ... your code 

// transform symfony roles into one dimensional array. 
public function array_flatten($array) 
{ 
    if (!is_array($array)) { 
     return FALSE; 
    } 
    $result = array(); 
    foreach ($array as $key => $value) { 
     if (is_array($value)) { 
      $result = array_merge($result, array_flatten($value)); 
     } else { 
      $result[$key] = $value; 
     } 
    } 
    return $result; 
} 
+0

ねえ、コントローラ!ご回答有難うございます。 新しいコントローラ、フォーム、ビューを作成する必要がありますか、またはFOSUserBundle RegistrationFormType.phpファイルを引き続き使用できますか?あなたのコードは、まったく新しい登録フォームを作成した場合にのみ機能するようです – shqnks

+0

np、あなたの答えが解決された場合は、解決済みとマークしてください) –

+0

編集:http://stackoverflow.com/help/someone-answers –

関連する問題