本文档侧重实战操作,具体理论、细节可以参看官方手册 《ThinkPHP5.1完全开发手册》

所有项目源码都在Github仓库,代码按天创建分支

本系列文档系黑鱼原创,未经授权,请勿转载!

第五天 ThinkPHP5路由实验(一)路由地址
黑鱼
发布日期: 2019-01-17 11:13:56
{{ fav.hits}} / {{ fav.ispage}}

route目录下的任何路由定义文件都是有效的,默认的路由定义文件是route.php,但你完全可以更改文件名,或者添加多个路由定义文件(你可以进行模块定义区分,但最终都会一起加载)。

合理安排路由文件,可以减少很多不必要的麻烦,本次实验路由定义都在route.php中。点此查看路由演示

image.png

最重要的一条规则:注册多个路由规则后,系统会依次遍历注册过的满足请求类型的路由规则,一旦匹配到正确的路由规则后则开始执行最终的调度方法,后续规则就不再检测。

最基础的路由定义方法是:

Route::rule('路由表达式','路由地址','请求类型');//除了路由表达式和路由地址是必须的外,其它参数均为可选。
//当两条规则同时满足匹配条件时,精确规则应当放在前面以获得优先处理
Route::get('route/show', 'route/show');//静态地址路由
Route::get(':lng/route/show', 'route/show');//有些场景中,特定参数前置会带来更好的用户体验
Route::get('route/:name', 'route/hello');
Route::get(':lng/route/:name', 'route/hello');

可选定义:支持对路由参数的可选定义

变量用[ ]包含起来后就表示该变量是路由匹配的可选变量。

Route::get('[:lng]/route/show', 'route/show');//上面的两条路由定义可以简化为一条

完全匹配:支持对路由参数的可选定义

规则匹配检测的时候默认只是对URL从头开始匹配,只要URL地址包含了定义的路由规则就会匹配成功,如果希望URL进行完全匹配,可以在路由表达式最后使用$符号。

Route::get('full/:full$', 'route/full');//只有完全匹配才执行对应方法

路由标识:路由参数的可选定义

Route::get('mark/:name','route/show2')->name('route_mark');//路由标识 需要确保唯一性


控制器文件

 class Route extends Base {

    public function index() {    
        return $this->fetch();
    }

    public function hello($lng='',$name) {
        if(empty($lng)){
            $lng="cn";
        }
        return "你好,{$name}!这是 hello 方法,当前版本是:" . $lng;
    }

    public function show($lng = 'cn') {
        $this->assign("lng", $lng);
        $this->assign("action", "show");
        return $this->fetch();
    }

    public function show2($lng = 'cn',$name='show2') {
        $this->assign("lng", $lng);
        $this->assign("action", "show2");
        $this->assign("name", $name);
        return $this->fetch();
    }

    public function full($full = 'cn') {
        $this->assign("lng", $full);
        $this->assign("action", "full");
        return $this->fetch("show");
    }
}


相关评论 文明上网,理性发言

发布评论

支持作者

  • 感谢您的支持,您的捐赠将用于:
      1、《沉语多语言集群系统》的进一步开发
      2、本站服务器等软硬件的费用支出
      3、ThinkPHP5.1教程的编写
      4、《沉语多语言集群系统》向TP5.1的升级工作