一个类似于蜘蛛的PHP路由器。

v1.0.0 2023-10-31 19:08 UTC

This package is not auto-updated.

Last update: 2024-09-26 01:06:09 UTC


README

一个像蜈蚣一样的PHP路由器,类似于Tarantulas

功能

  • 支持 getpostputpatchdeleteany 方法
  • 支持可选参数
  • 中间件
  • 路由分组
  • 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.