在UserRepository

时间:2016-10-06 09:17:40

标签: php symfony

嘿stackoverflow社区,

我想在我的UserRepository中访问路由参数。有没有选择这样做?

1。打开登录页面

有多个实例。如果您打开实例 exampleInstance ,则只有在此实例中注册时才能登录。

http://mywebpage.com/exampleInstance

2。在UserRepository中获取用户

如果用户在被调用的实例中注册,则会加载该用户。

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();
    }
}

我尝试使用 request session 获取参数,但我无法访问此服务。

我按照this教程实现了UserRepository。

有人能帮助我吗?谢谢:))

1 个答案:

答案 0 :(得分:2)

您需要将请求堆栈服务注入您的用户提供程序。这有点棘手,因为您无法访问存储库的构造函数,因此您需要使用setter注入。类似的东西:

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']]

那应该是这样做的。如果它感觉有点hackish那么它。应谨慎使用二传手注射。

我不在乎让存储库实现加载用户界面。我认为拥有自己的用户提供程序类并将存储库以及请求堆栈注入其中会更加清晰。但最终你会得到相同的结果。