上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}']], ];