2017-05-31 17 views
0

あなたの時間のためにこんにちはallとthansk。security.authorization_checkerサービスを呼び出してください

私はSymfony 3.0.2で働いていると、クラスで私は自分のアプリケーション に接続されている人のROLE_を見るためにサービスsecurity.authorization_checkerを取得しようとしているが、私はこのエラーを持っている:

をしようとしましたクラス "AppBundle \ Form \ RegistrationType"の "get"という未定義のメソッドを呼び出すことができます。 電話をかけようとしましたか? "getBlockPrefix"、 "getName"または "getParent"?

class RegistrationType extends AbstractType { 



public function buildForm(FormBuilderInterface $builder, array $options){ 

    $roles = new LoadRoles(); 
    // $container = new Container(); 

    // $this->denyAccessUnlessGranted('ROLE_ADMIN'); 
    //LOAD ROLES FOR SUPER ADMIN 
    if($this->get('security.authorization_checker')->isGranted('ROLE_SUPER_ADMIN')){ 
      $roles->getRolesForAdmin($builder, $options); 
    } 

    //LOAD ROLES FOR ADMIN 
    if($this->get('security.authorization_checker')->isGranted('ROLE_ADMIN')){ 
      $roles->getRolesForManager($builder, $options); 
    } 

    //LOAD ROLES FOR ASSOCIATION 
    if($this->get('security.authorization_checker')->isGranted('ROLE_ASSOCIATION')){ 
     $roles->getRolesForAssociation($builder, $options); 
    } 

} 

probblemは次の場所にあります。$this->get('security.authorization_checker')->isGranted('ROLE_SUPER_ADMIN') 機能は、コントローラ を拡張していないため、このサービスにアクセスする方法がある場合、私は思ったんだけどGET()関数を認識しませんか?

$form = $this->createForm($form, $item, array(
    'authService' => $this->get('security.authorization_checker') 
)); 

フォームで:

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver 
     //.. 
     ->setRequired('authService') 
    ; 
} 

あなたは今buildForm機能であなたのサービスにアクセスすることができます:私はあなたのコントローラから私の Sincerly

+0

あなたはあなたの*コントローラ*内でそれを呼び出そうとしていません、あなたはあなたの中でそれを呼び出そうとしていますr * FormType * - それは違いです。 FormTypeは通常、サービスコンテナにアクセスできません。おそらく、質問を編集して、達成しようとしていることを教えてください。 – ccKep

+0

@ccKepご回答ありがとうございます投稿を編集します – Ahmed

+0

フォームタイプをサービスとして定義し、権限チェッカーを挿入してください。http://symfony.com/doc/current/form/form_dependencies.html#define -your-form-as-a-service認可チェッカーをオプションとして渡すこともできます。 – Cerad

答えて

0

を許してくださいsymfonyに新たなんだ

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $authService = $options['authService']; 
    //... 
} 
関連する問題