## 路由 路由是 MixPHP 的核心组件之一,秉承极简理念,底层使用正则构建,好用又简单,并且可独立使用。 ## 组件 使用 [composer]([https://www.phpcomposer.com/](https://www.phpcomposer.com/)) 安装: ~~~ composer require mix/route ~~~ ## 依赖注入配置 - [beans/route.php](https://github.com/mix-php/mix-skeleton/blob/master/beans/route.php) ### 路由规则 路由规则在 rules 字段内定义,例如: ~~~php // 路由规则 'rules' => [ // 普通路由 '/' => [[\App\Http\Controllers\IndexController::class, 'index'], 'middleware' => [\App\Http\Middleware\ActionMiddleware::class]], '/profile/{id}' => [[\App\Http\Controllers\ProfileController::class, 'index'], 'middleware' => [\App\Http\Middleware\ActionMiddleware::class]], 'POST /file/upload' => [[\App\Http\Controllers\FileController::class, 'upload'], 'middleware' => [\App\Http\Middleware\ActionMiddleware::class]], // 分组路由 '/v2' => [ // 分组中间件 'middleware' => [\App\Http\Middleware\GroupMiddleware::class], // 分组路由规则 'rules' => [ // 分组路由 'POST /user/create' => [[\App\Http\Controllers\UserController::class, 'create'], 'middleware' => [\App\Http\Middleware\ActionMiddleware::class]], ], ], ], ~~~ 规则详解: - ` '/profile/{id}'` 匹配的 url 规则 - `[\App\Http\Controllers\ProfileController::class, 'index']` 匹配后执行的方法,callable 类型 - `'middleware'` 该路由的中间件 - `'/v2'` 分组路由的 url 前缀,匹配 /v2/user/create - `'POST /file/upload'` 前面的 POST 定义限制的请求方法,可定义多个,如:GET|POST ### RESTful 路由规则 框架支持的全部请求方法如下: ~~~ GET|POST|PUT|PATCH|DELETE|OPTIONS|HEAD|TRACE ~~~ 通过HTTP请求方法匹配,能够很简单的构建出 `RESTful` 风格。 ~~~php // 路由规则 'rules' => [ 'GET /user' => [[\App\Http\Controllers\UserController::class, 'index']], 'POST /user' => [[\App\Http\Controllers\UserController::class, 'save']], 'GET /user/{id}' => [[\App\Http\Controllers\UserController::class, 'read']], 'PUT /user/{id}' => [[\App\Http\Controllers\UserController::class, 'update']], 'DELETE /user/{id}' => [[\App\Http\Controllers\UserController::class, 'delete']], ], ~~~ ### 路由变量 上一节中 `{id}` 就是路由变量,下面演示一下普通变量的使用: ~~~php // 路由规则 'rules' => [ 'GET /user/{id}.html' => [[\App\Http\Controllers\UserController::class, 'read']], ], ~~~ 匹配的URL与指向的功能如下: | URL | 控制器::方法 | | --- | --- | | http://site.com/user/123456.html | \App\Http\Controllers\UserController::read | 代码中可以通过 `Mix\Http\Message\ServerRequest` 获取变量值: ~~~php $id = $request->getAttribute('id'); ~~~ ### 路由变量规则 路由变量也是可以定义规则的,规则是正则表达式,在 `patterns` 字段内定义。 >[info] 定义了变量规则后,当变量所在URL段不符合规则时,框架会抛出 404 错误。 ### 默认变量规则 如果你没有为变量定义规则,默认为 `defaultPattern` 字段内定义的规则,如果你连 `defaultPattern` 也没有定义,则默认为 `[\w-]+`。 ## 路由调用 路由类是在 StartCommand::class 中使用的,因此用户可随意修改执行逻辑,具体调用方式如下: [>> \App\Http\Commands\StartCommand::class <<](https://github.com/mix-php/mix-skeleton/blob/master/app/Http/Commands/StartCommand.php#L103)