Как получить объект запроса вне обработчика в Zend Expressive 3 - PullRequest
0 голосов
/ 11 июля 2019

Я хотел бы получить доступ к объекту запроса вне обработчика.

Я пытаюсь добиться того, чтобы иметь фабричный класс, который на основе значений из запроса настроит некоторый класс.

К сожалению, приведенный ниже код (в фабричном классе) не обеспечивает надлежащий объект запроса.

    public function __invoke(ContainerInterface $container, $requestedName, array $options = null, ServerRequestInterface $request): AbstractAttributeValidator
    {
        /** @var ServerRequestInterface $request */
        $request = $container->get(ServerRequestInterface::class);

Я не видел ничего в документации.

Не удалосьвы предлагаете что-то?Или я должен подойти к проблеме по-другому?

1 Ответ

0 голосов
/ 12 июля 2019

Вы не можете ввести запрос в сервис. Контейнер не знает о запросе. Я не уверен, чего вы на самом деле пытаетесь достичь, но есть обходные пути.

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

Другой обходной путь, который я использую, добавляет MyService::doSomethingWithRequest(ServerRequestInterface $request). Таким образом, класс обслуживания может выполнить запрос с запросом после того, как вы получили его из контейнера.

Так как вам нужен запрос, звучит то, что вам может понадобиться промежуточное программное обеспечение и выполнять некоторую логику вместо класса обслуживания. Простым примером может быть промежуточное ПО аутентификации .

Но было бы полезно, если бы вы описали, в каком сервисе вам нужен запрос.

...