美文网首页
24、TP5的路由变量规则

24、TP5的路由变量规则

作者: IUVO | 来源:发表于2018-06-01 16:02 被阅读41次
热身知识 变量规则
局部变量规则
1、复制/thinkphp/convention.php文件中的url_param_type配置项到自定义配置文件/config/config.php中,进行自定义配置:
  // URL参数方式 0 按名称成对解析 1 按顺序解析
  'url_param_type'         => 1,

并且使用按顺序解析的方式,简化路由规则。

2、修改/application/index/controller/Index.php文件中的测试用方法:

class Index
{
    public function test($name,$age)
    {
        return 'I am '.$name.', and I am '.$age.' old!';
    }
}

3、修改/config/route.php文件中的路由规则带上变量:

<?php
think\Route::get('test/:name/:age','index/index/test',[],[]);

4、但是此时的路由规则不严谨,因为没有对变量进行校验。
5、现在开始对变量进行校验:

<?php
think\Route::get('test/:name/:age','index/index/test',[],[
  'name' => '[a-zA-Z]+', //name必须是a~z和A~Z之间的纯字符串,至少要有一个字符
  'age'  => '\d{2}', //age必须是一个整数,并且必须是两位数
]);

6、这样一旦输入的名字或年龄不符合规则,就会提示模块不存在。


全局变量规则

1、依旧回到上一个例子中,假设有多个路由规则都要用到nameage的变量规则,那么我们可以把这两个变量规则做成全局变量规则,使所有变量规则都可以使用。

2、/config/route.php文件中写入全局变量规则:

<?php
think\Route::pattern([
  'name' => '[a-zA-Z]+', //name必须是a~z和A~Z之间的纯字符串,至少要有一个字符
  'age'  => '\d{2}', //age必须是一个整数,并且必须是两位数
]);

think\Route::get('test/:name/:age','index/index/test',[],[]);//不需要单独再写

3、还能将全局变量规则和路由写在一起,从而简化整个规则:

return [
  '__pattern__' => [
    'name' => '[a-zA-Z]+', //name必须是a~z和A~Z之间的纯字符串,至少要有一个字符
    'age'  => '\d{2}', //age必须是一个整数,并且必须是两位数
  ],
  'test/:name/:age' => 'index/index/test',
];

是不是清爽多了?

变量规则是路由中的一个重点,也是保证路由规则安全性的重要手段,当全局与局部变量规则作用在同一个路由变量上,局部规则覆盖全局规则,即局部的优先级高于全局。

相关文章

网友评论

      本文标题:24、TP5的路由变量规则

      本文链接:https://www.haomeiwen.com/subject/rxlksftx.html