Добавление 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]]]);
}