ThinkPHP 5实战
上QQ阅读APP看书,第一时间看更新

3.2 路由定义

3.2.1 编码定义

顾名思义,就是使用硬编码的形式进行定义(区别于配置式定义)。一般路由定义在application/route.php文件中,注册形式如下:

     Route::rule('路由表达式','路由地址','请求方法','路由条件','变量规则');

例如,下面的注册代码将会使访问“/news/”新闻ID的链接路由到index模块的News控制器的read方法:

     Route::rule('news/:id','index/News/read');

由于ThinkPHP 5的路由是针对所有模块的,所以定义的时候需要加上模块名。

ThinkPHP 5支持GET、POST、PUT、DELETE以及任意(*)请求方法定义。系统内置以下方法来简化路由定义:

     Route::get('news/:id','News/read'); // GET
     Route::post('news/:id','News/update'); // POST
     Route::put('news/:id','News/update'); // PUT
     Route::delete('news/:id','News/delete'); // DELETE
     Route::any('new/:id','News/read'); //任意请求方法

如果一个路由可以同时支持多种请求方法,可以使用“|”符号,意思和“或”一致。例如,有如下定义:

     Route::rule('news/:id','index/News/read', 'GET|POST');

则该路由允许POST和GET请求方法访问。

3.2.2 配置定义

通过返回数组来定义路由,而且可以批量定义,简化代码编写量。该定义方式和ThinkPHP 3很相似,但是不支持正则定义。例如:

     <?php
     return [
     // 首页路由到index模块index控制器的index方法
     '/' => 'index/index/index',
     'news/:id'  =>  'index/News/read', // 变量定义
     'news/[:id]'  =>  'index/news/read', // 可选变量定义
     'news/:id$'  =>  'index/news/read', // 完全匹配
     'user/:id'  =>  'index/user/show?status=1', // 传递隐式参数
     // 限制变量类型
     'post/:id'=>  ['index/post/show',['ext'=>'html'],['id'=>'\d{4}']],
     ];