У меня есть некоторые проблемы с пониманием того, как Закон Деметры должен применяться в некоторых случаях с системой DI Symfony.
У меня есть фабрика, которая требует доступа к текущему зарегистрированному пользователю в приложении.Для этого мне нужно, чтобы @ security.token_storage вставлял его в качестве аргумента конструктора.
Но на моей фабрике для доступа к пользователю мне нужно сделать: $ tokenStorage-> getToken () -> getUser() и хуже всего, если я захочу получить доступ к какому-либо свойству пользователя, мне нужно будет погрузиться на один уровень глубже.
Как бы вы решили эту проблему в соответствии с законом Деметры?
Вот пример моего кода:
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();
}
}
}
Надеюсь, у меня все понятно.
Большое спасибо:)