TP5路由定义

创建路由规则的方法

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--','product/detail',[],['name'=>'\w+','id'=>'\d+']);
//如果是可选变量
Route::get('item-','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

你可能感兴趣的:(后端工程师之路)