2016-10-06 2 views
1

にloadUserByUsernameでパラメータをルーティング私は私のUserRepositoryでルートパラメータにアクセスしたい、stackoverflowのコミュニティねえUserRepository

を取得します。これを行うオプションはありますか?

1.ログインページ

乗算インスタンスがあります。インスタンスexampleInstanceを開くと、このインスタンスに登録されている場合のみログインできます。彼が呼ばれるインスタンスに登録されている場合、ユーザーがロードされているUserRepository

http://mywebpage.com/exampleInstance 

2.取得ユーザー。

class UserRepository extends EntityRepository implements UserLoaderInterface 
{ 
    public function loadUserByUsername($username) 
    {   
     $instanceName = ... 

     return $this->createQueryBuilder('u') 
      ->join('u.instance', 'i') 
      ->where('i.name = :instanceName AND u.email = :email') 
      ->setParameter('instanceName', $instanceName) 
      ->setParameter('email', $username) 
      ->getQuery() 
      ->getOneOrNullResult(); 
    } 
} 

私は要求セッションでパラメータを取得しようとしましたが、私は、このサービスにアクセスすることはできません。

私はUserRepositoryを実装するためのチュートリアルthisを続けました。

誰かが私を助けることができますか?ありがとう:)

答えて

2

あなたのユーザープロバイダに要求スタックサービスを注入する必要があります。リポジトリのコンストラクタにアクセスできないため、セッタ注入を使用する必要があるため、これはちょっと難しいことです。次のようなものがあります。

use Symfony\Component\HttpFoundation\RequestStack; 

class UserRepository 
{ 
    public function setRequestStack(RequestStack $requestStack) 
    { 
     $this->requestStack = $requestStack; 
    } 
    public function loadUserByUsername($username) 
    {   
     $request = $this->requestStack->getMasterRequest(); 
     ... 
} 
// services.yml 
my.user_provider: 
    class: 'MyBundle\Entity\UserRepository' 
    factory: ['doctrine.orm.entity_manager','getRepository'] 
    arguments: 
     - 'MyBundle\Entity\User' 
    calls: 
     - ['setRequestStack', ['@request_stack']] 

これはかなりそうすべきです。ちょっとハッキリしていると感じたら、そうです。セッター注射は控えめに使用してください。

リポジトリに読み込みユーザーインターフェイスを実装しても構いません。自分のユーザー・プロバイダー・クラスを持ち、リポジトリーと要求スタックをそれに注入するのはちょっときれいだと思います。しかし、結局は同じ結果が得られます。

+0

ありがとうございました。それは私の多くの助け:) – user3241334

関連する問題