创建路由规则的方法
Route::rule('路由表达式','路由地址','请求类型','路由参数(数组)','变量规则(数组)')
例如: Route::rule(‘demo/[:name]/[:course]’,‘index/index/demo’,‘GET’,[‘ext’=>‘html’],[‘name’=>’[a-zA-Z]+’,‘course’=>’\w+’]);
路由表达式
- 路由表达式格式:
路由表达式 = 静态路由 + 动态变量
- 用表达式实例如下表所示
路由表达式 说明 ‘/’=>‘index’ 首页 ‘demo’=>‘index/user/demo’ 纯静态地址 ‘demo/:id’=>‘index/user/demo’ 静态地址+动态必选变量 'demo/[:name]=>‘index/user/demo’ 静态地址+动态可选变量 'demo/:id/[:name]=>‘index/user/demo’ 静态地址+动态变量[必选+可选] ‘:method/:id/[:name]’=>‘index/user/demo’ 全动态地址[路由表达式中全部内容均动态设置] 'demo/:id$=>‘index/user/demo’ 完全匹配[$是正则无字符,表示到此结束,后面再无内容] 'demo/:id=>‘index/user/demo?age=28&city=beijing’ 额外参数[指参数不通过路由表达式传入,而是由原始URL传入]
路由地址
路由地址,就是原始的、真实的访问地址,即不启用路由时,用普通模式访问的地址(PATH_INFO)
该路由地址,不需要用/结尾
请求类型
Router::rule()中的请求类型必须大写
请求类型 | 用途 | 描述 | URL格式 |
---|---|---|---|
GET | 从服务器端获取数据 | 仅查询,不修改,类似SELECT操作 | URL?参数表 |
POST | 在服务器端创建数据 | 提交并创建新信息,类似INSERT操作 | URL |
PUT | 改变服务器端数据 | 仅修改不创建,类似UPDATE操作 | URL?参数表 |
DELETE | 删除服务器端资源 | 根据条件删除数据,类似DELETE | URL?参数表 |
POST和PUT都可以向服务器端发送数据。POST作用在集合资源URL上,而PUT做用于具体资源上(URL/参数表)。如果操作前,可以在客户端确定URL,就用PUT,否则就用POST。所以,几乎所有提交操作都用POST发送,它不仅可以完成PUT和DELETE操作,而且无其它附加信息,URL地址更安全~~
便捷请求类型路由
请求类型 | 对应方法 | 实例 |
---|---|---|
GET | Router::get( ) | Router::get(‘read/:id’,‘index/user/read’) |
POST | Router::post( ) | Router::get(‘insert/:id’,‘index/user/insert’) |
PUT | Router::put( ) | Router::get(‘update/:id’,‘index/user/update’) |
DELETE | Router::delete( ) | Router::get(‘delete/:id’,‘index/user/delete’) |
任何类型 | Router::any( ) | Router::any(‘read/:id’,‘index/user/read’) |
路由参数
路由参数是指可以设置一些路由匹配的条件参数,主要用于验证当前的路由规则是否有效
参数 | 说明 |
---|---|
method | 请求类型检测,支持多个请求类型 |
ext | URL后缀检测,支持匹配多个后缀 |
deny_ext | URL禁止后缀检测,支持匹配多个后缀 |
https | 检测是否https请求 |
domain | 域名检测 |
before_behavior | 前置行为(检测) |
after_behavior | 后置行为(执行) |
callback | 自定义检测方法 |
merge_extra_vars | 合并额外参数 |
bind_model | 绑定模型(V5.0.1+) |
cache | 请求缓存(V5.0.1+) |
param_depr | 路由参数分隔符(V5.0.2+) |
ajax | Ajax检测(V5.0.2+) |
pjax | Pjax检测(V5.0.2+) |
注意:具体的路由限制用法可以参考官方使用手册
变量规则
- 全局变量规则,即全部路由有效
Route::pattern(变量名,正则);
// 设置name变量规则(采用正则定义)
Route::pattern('name','\w+');
// 支持批量添加
Route::pattern([
'name' => '\w+',
'id' => '\d+',
]);
- 局部变量规则
局部变量规则,仅在当前路由有效,如果一个变量同时定义了全局规则和局部规则,局部规则会覆盖全局变量的定义
Route::get('new/:name','News/read',[],['name'=>'\w+']);
- 完整URL规则
// 定义GET请求路由规则 并设置完整URL变量规则
Route::get('new/:id','News/read',[],['__url__'=>'new\/\w+$']);
- 组合变量规则
Route::get('item-<name>-<id>','product/detail',[],['name'=>'\w+','id'=>'\d+']);
//如果是可选变量
Route::get('item-<name><id?>','product/detail',[],['name'=>'[a-zA-Z]+','id'=>'\d+']);
路由地址
- 路由到
模块/控制器/操作
格式为:[模块/控制器/]操作?参数1=值1&参数2=值2...
此方式有两个动作:把满足条件的路由规则路由到相关的模块、控制器和操作,然后由App类调度执行相关的操作。
同时会进行模块的初始化操作(包括配置读取、公共文件载入、行为定义载入、语言包载入等等)
注意:多级控制器的时候使用.
,blog/:id'=>'index/group.blog/read
- 路由到操作方法
格式为:@[模块/控制器/]操作
直接执行某个控制器类的方法,而不需要去解析 模块/控制器/操作这些,同时也不会去初始化模块 - 路由到类方法
- 路由到重定向
- 路由到闭包函数
资源路由
标识 | 请求类型 | 生成路由规则 | 对应操作方法 |
---|---|---|---|
index | GET | blog | index |
create | GET | blog/create | create |
save | POST | blog | save |
read | GET | blog/:id | read |
edit | GET | blog/:id/edit | edit |
update | PUT | blog/:id | update |
delete | DELETE | blog/:id | delete |