我在理解在某些情况下如何在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();
}
}
}
我希望我很清楚。
非常感谢:)