, (*1)

, (*2)
Rudra-Router
Устанавливаем маршрут callback/:name для http метода GET
выполняет лямбда-функцию, (*3)
$router->get('callback/:name', function ($name) {
echo "Hello $name!";
});
Для вызова через Фасад Rudra-Container, (*4)
use Rudra\Router\RouterFacade as Router;
Router::get('callback/:name', function ($name) {
echo "Hello $name!";
});
вызывает MainController::read, (*5)
$router->get('read/:id', [MainController::class, 'read']);
вызывает MainController::read при помощи добавления аннотаций к MainController, (*6)
/**
* @Routing(url = ''read/:id')
*/
public function read($id)
вызывает MainController::read и добавляет middleware с ключами before или after соответственно_, (*7)
$router->get('read/page', [MainController::class, 'read'], ['before' => [Middleware::class]);
в аннотациях, (*8)
/**
* @Routing(url = 'read/page')
* @Middleware(name = 'App\Middleware\Middleware')
*/
public function read()
Для сбора аннотаций необходимо передать массив классов в которых есть аннотации в annotationCollector, (*9)
$router->annotationCollector([
\App\Controllers\MainController::class,
\App\Controllers\SecondController::class,
]);
```php
Router::annotationCollector([
\App\Controllers\MainController::class,
\App\Controllers\SecondController::class,
]);, (*10)
_С параметрами для middleware_
```php
$router->get('', [MainController::class, 'read'], [
'before' => [FirstMidddleware::class, [SecondMidddleware::class, ['int' => 456, new \stdClass]]],
'after' => [FirstMidddleware::class, [SecondMidddleware::class, ['int' => 456, new \stdClass]]]
]);
в аннотациях, (*11)
/**
* @Routing(url = '')
* @Middleware(name = 'App\Middleware\FirstMidddleware')
* @Middleware(name = 'App\Middleware\SecondMidddleware', params = {int : '456'})
* @AfterMiddleware(name = 'App\Middleware\FirstMidddleware')
* @AfterMiddleware(name = 'App\Middleware\SecondMidddleware', params = {int : '456'})
*/
public function read()
При передаче параметров в middleware необходимо добавлять параметр "array $params", (*12)
public function __invoke(array $params, array $middlewares)
Если параметры не передаются, то:, (*13)
public function __invoke(array $middlewares)
Следующие вызовы без параметров равны, (*14)
'before' => [FirstMidddleware::class, SecondMidddleware::class]],
'before' => [[FirstMidddleware::class], [SecondMidddleware::class]]
Устанавливаем маршрут create/:id для http метода POST
вызывает MainController::create, (*15)
$router->post('create/:id', [MainController::class, 'create']);
в аннотациях, (*16)
/**
* @Routing(url = 'create/:id', method = 'POST')
*/
public function create($id)
Устанавливаем маршрут update/:id для http метода PUT
вызывает MainController::update, (*17)
$router->put('update/:id', [MainController::class, 'update']);
в аннотациях, (*18)
/**
* @Routing(url = 'update/:id', method = 'PUT')
*/
public function update($id)
Устанавливаем маршрут update/:id для http метода PATCH
вызывает MainController::update, (*19)
$router->patch('update/:id', [MainController::class, 'update']);
в аннотациях, (*20)
/**
* @Routing(url = 'update/:id', method = 'PATCH')
*/
public function update($id)
Устанавливаем маршрут delete/:id для http метода DELETE
вызывает MainController::delete, (*21)
$router->delete('delete/:id', [MainController::class, 'delete']);
в аннотациях, (*22)
/**
* @Routing(url = 'delete/:id', method = 'DELETE')
*/
public function delete($id)
Устанавливаем маршрут any/:id для http методов GET|POST|PUT|PATCH|DELETE
вызывает MainController::any, (*23)
$router->any('any/:id', [MainController::class, 'any']);
в аннотациях, (*24)
/**
* @Routing(url = 'any/:id', method = 'GET|POST|PUT|PATCH|DELETE')
*/
public function any($id)
Устанавливаем ресурс для маршрута api/:id, методы GET|POST|PUT|DELETE
вызывает MainController::read для GET, (*25)
вызывает MainController::create для POST, (*26)
вызывает MainController::update для PUT, (*27)
вызывает MainController::delete для DELETE, (*28)
$router->resource('api/:id', MainController::class);
Изменить методы контроллера по умолчанию можно передав массив с вашими именами, (*29)
$router->resource('api/:id', MainController::class, ['actionIndex', 'actionAdd', 'actionUpdate', 'actionDrop']);
Вариант объявления маршрута методом set
Устанавливаем маршрут /test/:id для http методов DELETE|PUT
выполняет лямбда-функцию, (*30)
$router->set(['/test/page', 'POST|PUT', function () {
echo 'Hello world!';
}
]);
вызывает MainController::actionIndex, (*31)
$router->set(['/test/:id', 'DELETE|PUT', [MainController::class, 'actionIndex'], [
'before' => [First::class, Second::class],
'after' => [[First::class], [Second::class]]
]]);
Пример Middleware, (*32)
<?php
namespace App\Middleware;
use Rudra\Router\Router;
use Rudra\Router\MiddlewareInterface;
class FirstMiddleware extends Router implements MiddlewareInterface
{
public function __invoke(array $middlewares)
{
$this->next($middlewares);
}
public function next(array $middlewares): void
{
$this->handleMiddleware($middlewares);
}
}
Пример Middleware с параметрами с использованием Фасада, (*33)
<?php
namespace App\Middleware;
use Rudra\Router\MiddlewareInterface;
use Rudra\Router\RouterFacade as Router;
class SecondMiddleware implements MiddlewareInterface
{
public function __invoke(array $middlewares, array $params)
{
var_dump($params);
$this->next($middlewares);
}
public function next(array $middlewares): void
{
Router::handleMiddleware($middlewares);
}
}