rudra / router
Rudra framework
Requires
- php: >=7.4
- rudra/annotation: 2024
- rudra/container: 2024
- rudra/exception: 2024
This package is auto-updated.
Last update: 2024-11-19 12:24:07 UTC
README
Rudra-Router
Устанавливаем маршрут callback/:name для http метода GET
выполняет лямбда-функцию
$router->get('callback/:name', function ($name) { echo "Hello $name!"; });
Для вызова через Фасад Rudra-Container
use Rudra\Router\RouterFacade as Router; Router::get('callback/:name', function ($name) { echo "Hello $name!"; });
вызывает MainController::read
$router->get('read/:id', [MainController::class, 'read']);
вызывает MainController::read при помощи добавления аннотаций к MainController
/** * @Routing(url = ''read/:id') */ public function read($id)
вызывает MainController::read и добавляет middleware с ключами before или after соответственно_
$router->get('read/page', [MainController::class, 'read'], ['before' => [Middleware::class]);
в аннотациях
/** * @Routing(url = 'read/page') * @Middleware(name = 'App\Middleware\Middleware') */ public function read()
Для сбора аннотаций необходимо передать массив классов в которых есть аннотации в annotationCollector
$router->annotationCollector([ \App\Controllers\MainController::class, \App\Controllers\SecondController::class, ]);
Router::annotationCollector([ \App\Controllers\MainController::class, \App\Controllers\SecondController::class, ]);
С параметрами для middleware
$router->get('', [MainController::class, 'read'], [ 'before' => [FirstMidddleware::class, [SecondMidddleware::class, ['int' => 456, new \stdClass]]], 'after' => [FirstMidddleware::class, [SecondMidddleware::class, ['int' => 456, new \stdClass]]] ]);
в аннотациях
/** * @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"
public function __invoke(array $params, array $middlewares)
Если параметры не передаются, то:
public function __invoke(array $middlewares)
Следующие вызовы без параметров равны
'before' => [FirstMidddleware::class, SecondMidddleware::class]], 'before' => [[FirstMidddleware::class], [SecondMidddleware::class]]
Устанавливаем маршрут create/:id для http метода POST
вызывает MainController::create
$router->post('create/:id', [MainController::class, 'create']);
в аннотациях
/** * @Routing(url = 'create/:id', method = 'POST') */ public function create($id)
Устанавливаем маршрут update/:id для http метода PUT
вызывает MainController::update
$router->put('update/:id', [MainController::class, 'update']);
в аннотациях
/** * @Routing(url = 'update/:id', method = 'PUT') */ public function update($id)
Устанавливаем маршрут update/:id для http метода PATCH
вызывает MainController::update
$router->patch('update/:id', [MainController::class, 'update']);
в аннотациях
/** * @Routing(url = 'update/:id', method = 'PATCH') */ public function update($id)
Устанавливаем маршрут delete/:id для http метода DELETE
вызывает MainController::delete
$router->delete('delete/:id', [MainController::class, 'delete']);
в аннотациях
/** * @Routing(url = 'delete/:id', method = 'DELETE') */ public function delete($id)
Устанавливаем маршрут any/:id для http методов GET|POST|PUT|PATCH|DELETE
вызывает MainController::any
$router->any('any/:id', [MainController::class, 'any']);
в аннотациях
/** * @Routing(url = 'any/:id', method = 'GET|POST|PUT|PATCH|DELETE') */ public function any($id)
Устанавливаем ресурс для маршрута api/:id, методы GET|POST|PUT|DELETE
вызывает MainController::read для GET
вызывает MainController::create для POST
вызывает MainController::update для PUT
вызывает MainController::delete для DELETE
$router->resource('api/:id', MainController::class);
Изменить методы контроллера по умолчанию можно передав массив с вашими именами
$router->resource('api/:id', MainController::class, ['actionIndex', 'actionAdd', 'actionUpdate', 'actionDrop']);
Вариант объявления маршрута методом set
Устанавливаем маршрут /test/:id для http методов DELETE|PUT
выполняет лямбда-функцию
$router->set(['/test/page', 'POST|PUT', function () { echo 'Hello world!'; } ]);
вызывает MainController::actionIndex
$router->set(['/test/:id', 'DELETE|PUT', [MainController::class, 'actionIndex'], [ 'before' => [First::class, Second::class], 'after' => [[First::class], [Second::class]] ]]);
Пример Middleware
<?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 с параметрами с использованием Фасада
<?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); } }