alirezasalehizadeh / routail
一个类似于蜘蛛的PHP路由器。
v1.0.0
2023-10-31 19:08 UTC
Requires
- php: ^8.2.0
Requires (Dev)
- pestphp/pest: ^2.6.3
This package is not auto-updated.
Last update: 2024-09-26 01:06:09 UTC
README
一个像蜈蚣一样的PHP路由器,类似于Tarantulas
功能
- 支持
get
、post
、put
、patch
、delete
和any
方法 - 支持可选参数
- 中间件
- 路由分组
- URL生成器
要求
PHP >= 8.2
入门
安装
通过Composer
composer require alirezasalehizadeh/routail
路由定义
以下示例展示了如何定义一个路由并运行它
use AlirezaSalehizadeh\Routail\Router; $router = new Router(); $router->get(string $pattern, string|array|Closure $action) ->name(string $name) ->prefix(string $prefix) ->middleware(array $middlewares); $router->run();
路由分组定义
use AlirezaSalehizadeh\Routail\Router; $router = new Router(); $router->group(Closure $action, array $middlewares, string $prefix); $router->run();
用法
中间件
要使用中间件,你需要创建一个继承自 AlirezaSalehizadeh\Routail\Middleware
类的类,并实现返回布尔值的 handle
方法
use AlirezaSalehizadeh\Routail\Request; use AlirezaSalehizadeh\Routail\Middleware\Middleware; class FooMiddleware extends Middleware { public function handle(Request $request): bool { return true; } }
URL生成器
通过 url
方法,你可以轻松地根据路由名称创建URL
use AlirezaSalehizadeh\Routail\Router; $router = new Router(); $router->get('/users/{id}', 'UserController@show')->name('user_show'); $router->url('user_show', ['id' => '1']); // output: /users/1
路由参数类型
路由参数可以有类型,这可以是可选的
any
id
int
string
uuid
slug
bool
date
int? // optional
any? // optional
示例
use AlirezaSalehizadeh\Routail\Router; $router = new Router(); $router->get('/users', 'UserController@index'); $router->any('/users', [UserController::class, 'index']); // route pattern with parameter $router->get('/users/{id}', 'UserController@show'); // route pattern with parameter and type $router->get('/users/{id:int}', function($id){ return "User id is $id"; }); // route pattern with optional parameter $router->get('/users/{id:int?}', function($id = 1){ return "User id is $id"; }); // set name for route $router->get('/users/{id}', 'UserController@index')->name('user_index'); // set prefix for route $router->get('/users/{id}', 'UserController@index')->prefix('/api/v1'); // set middleware for route $router->get('/users/{id}', 'UserController@index')->middleware([FooMiddleware::class, BarMiddleware::class]); // route group $router->group(function($router){ $router->get('/users', 'UserController@index'); $router->get('/users/{id}', 'UserController@show'); }, [FooMiddleware::class, BarMiddleware::class], '/api/v1');
贡献
请阅读 CONTRIBUTING.md 文件。
许可证
MIT.