Как вернуть дополнительную информацию от избирателя в Symfony4? - PullRequest
1 голос
/ 18 марта 2020

У меня есть избиратель, который я использую, чтобы проверить, может ли текущий пользователь получить доступ к объекту. В доступе может быть отказано по нескольким причинам, и я хотел бы знать, какой в ​​контроллере. Тем не менее, избиратель может вернуть только логическое значение, то же самое для isGranted () в контроллере, поэтому я не уверен, по какому каналу я могу передать дополнительную информацию, которую я хочу. Бросить исключение не стоит, поскольку могут быть и другие избиратели, которые еще не были вызваны.

Более близкая вещь, о которой я могу подумать, это сообщения fla sh, которые можно использовать для передачи информации извне. аргументов функций и возвращаемых значений, но в этой ситуации кажется хаком использовать их.

1 Ответ

1 голос
/ 18 марта 2020

Вы можете зарегистрировать их в сервисе, как если бы вы что-то делали с помощью LoggerInterface, - но в свой собственный простой сервис сбора данных.

В Symfony контейнерные сервисы по умолчанию являются «одиночками» - один и тот же сервис, извлекаемый из нескольких мест, является одним и тем же объектом (например, регистратором). Создание простого сервиса для накопления информации может быть рассмотрено позже.

Уже доступны некоторые сервисы, которые могут использоваться для этого - например, получение текущего запроса из стека и добавление новый предмет в один из пакетов с параметрами.

<?php
class ServiceName
{
    private $requestStack;
    public function __construct(RequestStack $requestStack) {
        $this->requestStack = $requestStack;
        $requestStack->getCurrentRequest()->attributes->set('simple-store', 'blah');
        //OR, set it in a method that is called deep in the system
    }

// And now in a controller
// $value = $request->attributes->get('simple store'),
// Or in Twig template: `{{ dump(app.request.get('simple store')) }}`:

Однако ваша собственная «служба сбора рассуждений», вероятно, будет чище.

...