3.Thinkphp的路由
2021-02-19 16:17
标签:地址 cache 项目 应用 配置文件 前缀 正则表达式 隐藏 控制器 什么是路由? 将用户的请求按照事先规划的方案提交给指定的 控制器 和 方法来进行处理。 Thinkphp框架提供了两种路由规则 ? pathinfo模式 ? 自定义路由规则【推荐】 进而可以让URL更规范以及优雅,提高网站的安全和网站URL访问的友好度。 Route类注册使用think\facade\Route类静态调用 think\Route.php 注:ThinkPHP5.1的路由定义更加对象化,并且默认开启路由(不能关闭),如果一个URL没有定义路由,则采用默认的PATH_INFO 模式访问URL。 Thinkphp在 .htaccess文件内容如下 那我们访问的路由应该可以写http://www.tp5.com/index/index/,用浏览器访问会发现访问错误404,说明重写失败 那我们应该如何访问呢?应该使用这个http://www.tp5.com/index.php/index/index/访问 细心的你会发现中间多了一层index.php,那么我们可以将这个给隐藏吗,也就是让重写生效?答案是可以的 找到 找到虚拟主机配置文件按下图方式设置 在入口文件中要有.htaccess文件 重启apache服务,让配置生效。访问时就可以不用带index.php文件了。 在config/app.php配置文件中设置 对于路由规则较多的应用可以大幅提升路由性能(仅部署模式有效) 路由文件的位置:项目目录/routes/route.php文件中进行如下格式的定义 注:给控制器方法设置好了请求的路由规则后,原来的pathinfo请求则失效,请求就会报异常,只能通过自定义路由规则来请求 例: 定义一个跟路由并使用匿名函数输出 写法如下: 例: 测试定义好的请求路由规则类型,使用postman软件来测试 路由参数分为下面两种: 必填参数的参数必须填,可选参数的参数值可写可不填 形参名和参数名必须保持一致否则会报错 运行结果: 注意:可选参数设置时,如果要获取参数则需要在形参出设置默认值 运行结果: 为什么要对路由参数的类型进行限制?因为可以提高效率,官方给出的数据是比不限制的快4倍 标量限定时php7提供的,所以要想使用必须保证本地环境是php7以上 例: 例: 运行结果 路由分组功能允许把相同前缀的路由定义合并分组,这样可以简化路由定义,并且提高路由匹配的效率,不必每次都去遍历完整的路由规则(尤其是开启了路由延迟解析后性能更佳)。 使用 Route::group(‘分组名(字符串)或者分组路由参数(数组)‘,‘分组路由规则(数组或者闭包)‘); 3.Thinkphp的路由 标签:地址 cache 项目 应用 配置文件 前缀 正则表达式 隐藏 控制器 原文地址:https://www.cnblogs.com/makalochen/p/12932167.html路由简介
pathinfo 方式路由
pathinfo:即全路径的访问控制器方法,如:域名/模块/控制器/方法
pathinfo 方式路由示例
// index模块下index控制器index方法
tp5.com/index/index/index
隐藏index.php文件
为什么要配置隐藏index.php
pubilc文件夹下的.htaccess
文件中已经默认配置了重写配置重写,隐藏index.php文件
1.打开apache重写模块
apache
的httpd.conf
文件搜索rewrite
将LoadModule rewrite_module modules/mod_rewrite.so
前面的#号去掉2.配置虚拟主机中允许重写
路由常用配置
强制路由
‘url_route_must‘ => true,
注:将开启强制使用路由,这种方式下面必须严格给每一个访问地址定义路由规则(包括首页),否则将抛出异常。
路由缓存
‘route_check_cache‘ => true,
注:如果路由定义中,有某个路由规则的路由地址使用了闭包的方式,那么路由缓存将会失效。
完全匹配
‘route_complete_match‘ => true,
自定义路由
路由如何定义
Route::请求方式(‘路由表达式‘,匿名函数);
或者
Route::请求方式(‘路由表达式‘,‘[@]模块名/控制器名/方法名‘);
hello world ruote...
路由请求类型
Route::get(‘new/:id‘,‘News/read‘); // 定义GET请求路由规则 查询
Route::post(‘new/:id‘,‘News/update‘); // 定义POST请求路由规则 添加
Route::put(‘new/:id‘,‘News/update‘); // 定义PUT请求路由规则 修改
Route::delete(‘new/:id‘,‘News/delete‘); // 定义DELETE请求路由规则 删除
Route::any(‘new/:id‘,‘News/read‘); // 所有请求都支持的路由规则 框架提供 不推荐
路由参数
路由参数分类
# 必填参数
Route::请求方式(‘路由表达式/:参数‘,匿名函数);
# 可选参数
Route::请求方式(‘路由表达式/[:参数]‘,匿名函数);
必填参数示例:
Route::get(‘/dd/:id‘, function ($id){
return ‘你输入的参数值为:‘.$id;
});
可选参数示例:
Route::get(‘/dd/[:id]‘, function ($id = 0){
return ‘你输入的参数值为:‘.$id;
});
路由参数类型的限制
方式一:标量限定
例Route::get(‘/dd/:id‘, function (int $id){
return ‘你输入的参数值为:‘.$id;
});
方式二:正则表达式限定
Route::get(‘/dd/:id‘, function ($id){
return ‘你输入的参数值为:‘.$id;
})->pattern([‘id‘ => ‘\d+‘]);
传入多个参数并限定
Route::get(‘/dd/:id/:name‘, function ($id,$name){
return ‘你输入的参数值为:‘.$id.$name;
})->pattern([‘id‘ => ‘\d+‘]);
路由分组基本使用
Route
类的group
方法进行注册,给分组路由定义一些公用的路由设置参数,使用规范如下:
格式示例:
Route::group(‘blog‘, function () {
Route::get(‘:id‘, ‘read‘);
Route::post(‘:id‘, ‘update‘);
Route::delete(‘:id‘, ‘delete‘);
})->pattern([‘id‘ => ‘\d+‘]);
# 分组的嵌套
Route::group([‘method‘=>‘get‘], function () {
Route::group(‘blog‘,function(){
Route::get(‘:id‘, ‘read‘);
Route::post(‘:id‘, ‘update‘);
Route::delete(‘:id‘, ‘delete‘);
});
})->pattern([‘id‘ => ‘\d+‘]);
单个分组示例
//路由分组
Route::group(‘bolg‘,function (){
Route::get(‘index‘,function (){
return ‘index‘;
});
});
分组嵌套示例
/**
* admin/login
* admin/welcome
*/
Route::group([‘method‘=>‘get‘], function () {
Route::group(‘admin‘,function(){
Route::get(‘login‘,function (){
return ‘route long‘;
});
Route::get(‘welcome‘,function (){
return ‘route welcome‘;
});
Route::post(‘login‘,function (){
return ‘route long‘;
});
});
})->pattern([‘id‘ => ‘\d+‘]);