Реализация промежуточного программного обеспечения для конкретного маршрута - PullRequest
0 голосов
/ 09 марта 2019

Мне удалось использовать обработчик запросов в сочетании с aura-router с одним обработчик маршрутизатора .

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

$routerContainer = new RouterContainer();
$map = $routerContainer->getMap();

// Works fine...
$map->get('index', '/', 'App\Http\Controllers\HomeController::index');

// Error: Invalid request handler: array
$map->get('index', '/', [
    new SampleRouteMiddleware(),
    'App\Http\Controllers\HomeController::index'
]);

$request = ServerRequestFactory::fromGlobals($_SERVER, $_GET, $_POST, $_COOKIE, $_FILES);

$requestContainer = new RequestHandlerContainer();

$dispatcher = new Dispatcher([
    new SampleAppMiddleware(), // applies to all routes...
    new AuraRouter($routerContainer),
    new RequestHandler($requestContainer),
]);

$response = $dispatcher->dispatch($request);

1 Ответ

0 голосов
/ 09 марта 2019

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

use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Server\MiddlewareInterface as Middleware;

class SampleMiddleware implements Middlware
{
    public function process(Request $request, Handler $handler): Response
    {
        if ($this->supports($request)) {
             // Do something specific to your middleware
        }

        return $handler->handle($request);
    }

    public function supports(Request $request): bool
    {
        // Write the conditions that make the SampleMiddleware take action. i.e.,
        return $request->getPath() === "/sample";
    }

}

Только промежуточное программное обеспечение будет обрабатывать это промежуточное программное обеспечение.

...