Получить текущего пользователя в приложении Symfony, уважая LoD - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть некоторые проблемы с пониманием того, как Закон Деметры должен применяться в некоторых случаях с системой 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();
        }
    }
}

Надеюсь, у меня все понятно.

Большое спасибо:)

...