在遵守LoD的同时在Symfony应用中检索当前用户

时间:2018-11-25 16:26:29

标签: symfony dependency-injection law-of-demeter

我在理解在某些情况下如何在Symfony的DI系统中应用Demeter法则时遇到了一些问题。

我有一些工厂,需要访问该应用程序中当前登录的用户。为此,我需要要求@ security.token_storage将其作为构造函数参数注入。

但是在我的工厂中,要访问用户,我需要做:$ tokenStorage-> getToken()-> getUser(),最糟糕的是,如果我要访问用户的某些属性,则需要潜水更深一层。

您将如何根据Demeter的定律解决此问题?

这是我的代码的示例:

class SomeFactory
{

    /**
     * @var User
     */
    private $currentUser;

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

    /**
     * @param TokenStorageInterface $tokenStorage
     */
    protected function setCurrentUser(TokenStorageInterface $tokenStorage)
    {
        if ($tokenStorage->getToken()
            && $tokenStorage->getToken()->getUser()
            && in_array('ADMIN_ROLE', $tokenStorage->getToken()->getUser()->getRoles())
        ) {
            $this->currentUser = $tokenStorage->getToken()->getUser();
        }
    }
}

我希望我很清楚。

非常感谢:)

0 个答案:

没有答案