路由:
默认规则PATHINFO模式
http://server/module/controller/action/param/value/
路由模式:
url_route_on url_route_must控制路由行为
三种路由模式:普通模式、混混模式和强制模式
普通模式
禁用路由,按照PATHINFO模式解析请求
'url_route_on' => false,
混合模式
PATHINFO模式 + 路由定义解析
'url_route_on' =>true,
'url_route_must' => false,
强制模式
'url_route_on' =>true,
'url_route_must'=>true,
路由定义
application/route.php
Route::rule('路由表达式','路由地址','请求方法','路由条件','变量规则');
实例:
Route::rule('news/:id','index/News/read');
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');
配置定义:
返回数组定义路由,可以批量定义,简化代码编写量
<?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}']],
];
路由条件
路由参数是指可以设置一些路由匹配的条件参数,主要用于验证当前的路由规则是否有效
参数 说明
method 请求类型检测,支持多个请求类型
ext URL后缀检测,支持匹配多个后缀
deny_ext URL禁止后缀检测,支持匹配多个后缀
https 检测是否https请求
domain 域名检测
before_behavior 前置行为(检测)
after_behavior 后置行为(执行)
callback 自定义检测方法
merge_extra_vars 合并额外参数
bind_model 绑定模型(V5.0.1+)
cache 请求缓存(V5.0.1+)
param_depr 路由参数分隔符(V5.0.2+)
ajax Ajax检测(V5.0.2+)
pjax Pjax检测(V5.0.2+)
'news/:id'=>[
'news/show/:name$',
[
// 只允许GET或POST
'method' => 'get|post',
// 只允许shtml后缀
'ext' =>'shtml',
// 不允许shtml后缀
'deny_ext' => 'shtml',
// 只允许https
'https'=>true,
]
]
路由地址:
路由地址就是路由匹配成功之后需要执行的操作
支持以下几种方法:
路由到模块 / 控制器
'news/:id' =>'index/news/read'
控制器:
<?php
namespace app\index\controller;
class News {
public function read($id){
echo '当前显示'.$id.'的新闻';
}
}
控制器支持无限级设置,例如下面的路由定义将会执行app\index\controller\site\news控制器的read方法
'news/:id'=>'index/site.news/read'
重定向
重定向和路由的区别是,重定向会在浏览器中产生一次301或302响应,而路由是浏览器无感知的。
重定向以“/”(站内,请特别注意不要忘记斜杠)或“http”或“https”开始,站内跳转如下:
'news/:id' =>'/news/show/:id.html'
访问/news/id链接时,浏览器将会产生301响应,跳转到/news/show/id.html地址
站外跳转如下:
'news/:id' =>'http://www.example.com/news/:id.html'
路由到控制器方法
不需要去解析模块/控制器/操作,同时也不会去初始化模块
例如:定义将会执行index模块的news控制器的read方法
'news/:id' =>'@index/news/read'
路由到类静态方法
此类路由支持任何类的静态方法,包括控制器。例如,下面的定义将会路由到index模块中News控制器的静态read方法
'news/:id' =>'app\index\controller\News::read'
路由到闭包函数
直接在application/route.php 定义
Route::get('news/:id',function($id){
return '访问'.$id.'的新闻';
})