Rudra FrameworkRudra Framework

Добавление Middleware:

php rudra create:middleware

Краткий вариант:

php rudra cr:mid
Enter middleware name: bar
Enter container: web

Результат:

<?php

namespace App\Containers\Web\Middleware;

use Rudra\Router\MiddlewareInterface;
use Rudra\Router\RouterFacade as Router;

class BarMiddleware implements MiddlewareInterface
{
    public function __invoke($middlewares)
    {
        dump(__CLASS__);
        $this->next($middlewares);
    }

    public function next(array $middlewares): void
    {
        Router::handleMiddleware($middlewares);
    }
}

В случае если в цепочке нет последующих элементов, метод next необязателен:

<?php

namespace App\Containers\Web\Middleware;

use Rudra\Router\MiddlewareInterface;

class BarMiddleware implements MiddlewareInterface
{
    public function __invoke($middlewares)
    {
        dump(__CLASS__);
    }
}

Добавление Middleware в аннотации к контроллеру:

/**
 * @Routing(url = '')
 * @Middleware(name = 'App\Middleware\BarMiddleware')
 */
public function index()
{

}

Добавление Middleware в аннотации к контроллеру для вызова после контроллера:

/**
 * @Routing(url = '')
 * @AfterMiddleware(name = 'App\Middleware\BarMiddleware')
 */
public function index()
{

}

Для добавления параметров необходимо указать в контроллере:

* @Middleware(name = 'App\Containers\Web\Middleware\BarMiddleware', params = {int : '456'})

или

* @AfterMiddleware(name = 'App\Containers\Web\Middleware\BarMiddleware', params = {int : '456'})

А также добавить в метод Middleware __invoke($middlewares, $params) например:

<?php

namespace App\Containers\Web\Middleware;

use Rudra\Router\MiddlewareInterface;
use Rudra\Router\RouterFacade as Router;

class BarMiddleware implements MiddlewareInterface
{
    public function __invoke($middlewares, $params)
    {
        dump(__CLASS__);
		dump($params);
    }
}

Также можно вызвать Middleware  используя фасад:

use Rudra\Router\RouterFacade as Router;
use App\Containers\Web\Middleware\BarMiddleware;

Например:

/**
 * @Routing(url = '')
 * @AfterMiddleware(name = 'App\Middleware\BarMiddleware')
 */
public function index()
{
	Router::handleMiddleware([[BarMiddleware::class, ['int' => 456]]]);
}