grabbee
@grabbee

Symfony voters, почему если передавать $request_stack возникает ошибка?

Пытаюсь разобраться в Voters и сделать проверку ID пользователя, чтобы соответствовал $uid из запроса. Кажется логичным передать в сервис $request_stack Но возникает проблема

# app/config/security.yml
* Если я указываю атрибут вотера в access_control - то появляется ошибка "Trying to get property of non-object" когда я пытаюсь получить $uid параметр запроса $request_stack->getCurrentRequest()->get('uid');
access_control:
        - { path: ^/secret, roles: [UID] }


Обнаружил, что конструктор вотера вызывается почему-то два раза, и в первом $request_stack->getCurrentRequest() === null пытаясь запросить ->get('uid') и вызывает ошибку

api.uid_voter:
        class: SecretBundle\Security\UidVoter
        arguments: ['@request_stack']
        tags:
            - { name: security.voter }
        public: false


Сейчас завернул костылем
public function __construct(RequestStack $request_stack)
    {
        $request = $request_stack->getCurrentRequest();
        if ($request) {
            $this->uid = $request->get('uid');
        } 
    }

Может кто знает в чём причина?
  • Вопрос задан
  • 311 просмотров
Решения вопроса 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
1. Вам нужен метод getMasterRequest()
2. Получать объект $request надо во время выполнения методов сервиса, а не в конструкторе
3. Обернуть в if ($request) { все-таки придется, т.к., к примеру, в консоле реквеста не будет
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы