上一篇文章讲解“路由 – 路由定义 – 注册路由规则”,本篇文章讲解“路由 – 路由定义 – 路由表达式”。
路由表达式
路由表达式统一使字符串定义,采用规则定义的方式(不支持直接使用正则表达式,但支持给某个变量定义正则,参考后面的变量规则部分)。
1. 规则表达式
规则表达式通常包含静态地址和动态地址,或者两种地址的结合,例如下面都属于有效的规则表达式:
①在Index控制器中,新建archive方法:
②设置路由,静态地址与动态地址结合
预览:
2.可选定义
支持对路由参数的可选定义。
修改Index控制器下的archive方法的路由,有可选变量:
预览:
注意:
1. 定义可选变量路由对应的方法,可选变量的参数要有默认值。
2. 可选变量在访问时,可传参也可不传参。
3. 采用可选变量定义后,之前需要定义两个或者多个路由规则才能处理的情况可以合并为一个路由规则。
4. 可选参数只能放到路由规则的最后,如果在中间使用了可选参数的话,后面的变量都会变成可选参数。
3. 完全匹配
规则匹配检测的时候默认只是对URL从头开始匹配,只要URL地址包含了定义的路由规则就会匹配成功,如果希望URL进行完全匹配,可以在路由表达式最后使用$符号。
①在Index控制器中,新建news方法
②为news方法定义完全匹配的路由
预览:
注意:
1. 采用完全匹配后:
会被匹配成功
不会被匹配成功。
如果路由定义不采用完全匹配:
Route::rule(‘news/:id’,’index/Index/news’);
则两种方式的URL访问都可以匹配成功。
2. 如果需要全局进行URL完全匹配,可以在config/app.php中设置:
// 开启路由完全匹配
‘route_complete_match’ => true,
4. 额外参数
在路由跳转的时候支持额外传入参数对(额外参数指的是不在URL里面的参数,隐式传入需要的操作中,有时候能够起到一定的安全防护作用,后面我们会提到)。例如:
上面的路由规则定义中额外参数的传值方式都是等效的。status和app_id参数都是URL里面不存在的,属于隐式传值,当然并不一定需要用到,只是在需要的时候可以使用。
①在Index控制器中,新建otherFun方法:
②定义otherFun方法的路由,设置额外参数
预览:
5. 路由标识
如果你需要快速的根据路由生成URL地址,可以在定义路由的时候指定生成标识(但要确保唯一)。
①在Index控制器中,新建flgFun方法:
②定义flgFun方法的路由,设置路由标识
预览:
③使用路由标识生成路由地址
修改Index控制器下的flgFun方法,输出使用路由标识生成的路由地址:
预览:
注意:
1. 如果设置路由标识,可以使用路由标识生成路由地址:
url(‘index_flg’,[‘id’=>10]);
如果不定义路由标识的话,使用下面的方式生成:
url(‘index/Index/flg’,[‘id’=>10]);
2. URL的生成,可看后续章节“URL生成”。
ThinkPHP5连载为卓象程序员原创,转载请联系卓象程序员
关注卓象程序员,定期发布技术文章
下一篇讲解“路由 – 变量规则”