2017-06-09 8 views
0

ログインしているユーザーとAdminクラスの取得に問題があります。私がしたいのは、(イベントを作成するときに他の組織を選ぶことができないように)選択欄をユーザ組織にログインするように制限することです。したがって、私は私のCalendarAdminにTokenStorageを注入してきましたが、私はログインしていても、$はtokenStorage->入手トークンは、()nullである をここに私の関連するコードです:。SecurityToken null in Sonata Adminクラス

のsecurity.yml:

providers: 
    in_memory: 
     memory: ~ 
    fos_userbundle: 
     id: fos_user.user_manager 

    admin: 
     pattern:   /admin(.*) 
     context:   user 
     form_login: 
      provider:  fos_userbundle 
      login_path:  /admin/login 
      use_forward: false 
      check_path:  /admin/login_check 
      failure_path: null 
     logout: 
      path:   /admin/logout 
     anonymous:   true 

services.ymlは:

pozsonyba.calendar_bundle.admin.calendar: 
    class: Pozsonyba\Bundle\CalendarBundle\Admin\CalendarAdmin 
    arguments: [~, Pozsonyba\Bundle\CalendarBundle\Entity\Calendar, SonataAdminBundle:CRUD, @security.token_storage, @pozsonyba_organization.repository.organization_repository] 
    tags: 
     - {name: sonata.admin, manager_type: orm, group: admin, label: Calendar} 

私はこのsecurity.ymlファイルはファイアウォールは何かが欠けていることを、私は何を把握することはできません、間違って設定されている可能性があることを読みました。

ありがとうございました。 CalendarAdmin.php:

public function __construct($code, $class, $baseControllerName, TokenStorage $tokenStorage, OrganizationRepository $organizationRepository) 
    { 
     parent::__construct($code, $class, $baseControllerName); 

     VarDumper::dump($tokenStorage->getToken());die; 
     $this->organizationRepository = $organizationRepository; 
    } 

答えて

1

チェックアウト\Sonata\AdminBundle\Admin\AbstractAdminクラス。あなたは、コンテナおよび構成のプールを介したトークンストレージへのアクセスを得ることができます:

私は別の方法として、あなたは TokenStorageを注入しようとすることができるので、トークンは、管理オブジェクトの作成時に設定されていないと思います
$this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser() 

セッター・インジェクション経由:

# CalendarAdmin.php 
/** @var TokenStorageInterface */ 
private $tokenStorage; 

/** 
* @param TokenStorageInterface $tokenStorage 
*/ 
public function setTokenStorage($tokenStorage) 
{ 
    $this->tokenStorage = $tokenStorage; 
} 

働い更新サービス定義

# services.yml 
pozsonyba.calendar_bundle.admin.calendar: 
    class: Pozsonyba\Bundle\CalendarBundle\Admin\CalendarAdmin 
    arguments: [~, Pozsonyba\Bundle\CalendarBundle\Entity\Calendar, SonataAdminBundle:CRUD, @security.token_storage, @pozsonyba_organization.repository.organization_repository] 
    calls: 
     - [setTokenStorage, ["@security.token_storage"]] 
    tags: 
     - {name: sonata.admin, manager_type: orm, group: admin, label: Calendar} 
+0

は、あなたに感謝:) –

関連する問題