美文网首页
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