Zend Expressive - промежуточное ПО проверяет, есть ли следующее доступное?

В моих маршрутах.global.php у меня есть это в маршрутах.

    [
        'name' => 'test',
        'path' => '/test',
        'middleware' => [App\Action\Test1Action::class, App\Action\Test2Action::class],
        'allowed_methods' => ['GET'],
    ],

И я возвращаю $next($request, new JsonResponse($data)); в конце класса Test1Action, чтобы он отправил данные следующему действию.

Но есть ли способ внутри Test1Action проверить, есть ли после этого другое действие?

Может быть, есть другой способ, чтобы я мог выполнить вышеуказанный возврат, если он есть после, или вернуть обряд ответа json.

вернуть новый JsonResponse ($ данные);

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

Я пробовал несколько вариантов, но не работал. Любая помощь будет отличной. Спасибо.


person sparkmix    schedule 08.03.2017    source источник


Ответы (1)


Возможно, вы можете проверить $next, если он нулевой или нет. Но это всегда может быть установлено, я никогда не пробовал. Однако в Expressive 2 он всегда установлен и меняется на «Делегаты». Также последним промежуточным ПО всегда будет NotFoundHandler.

Поскольку вы сами разрабатываете свое приложение, вы знаете порядок промежуточного программного обеспечения и действий. Я бы позволил промежуточному программному обеспечению Test1Action сделать свое дело, добавить результат в $request в качестве атрибута и позволить следующему промежуточному программному обеспечению выяснить, были ли установлены данные или нет. Если данные не были установлены, пропустите их и выполните следующее промежуточное ПО в очереди. Это делает его намного проще.

person xtreamwayz    schedule 10.03.2017