最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

ThinkPHP5.2:路由的调整和改进

来源:懂视网 责编:小采 时间:2020-11-03 18:22:49
文档

ThinkPHP5.2:路由的调整和改进

ThinkPHP5.2:路由的调整和改进:ThinkPHP5.2的路由部分,也和其它组件一样,做了精简和优化,主要包括如下方面:取消路由定义的返回数组形式因为不利于路由缓存生成,路由定义文件取消了返回数组的方式定义路由,必须采用路由方法注册路由。例如:return [ 'hello/:name
推荐度:
导读ThinkPHP5.2:路由的调整和改进:ThinkPHP5.2的路由部分,也和其它组件一样,做了精简和优化,主要包括如下方面:取消路由定义的返回数组形式因为不利于路由缓存生成,路由定义文件取消了返回数组的方式定义路由,必须采用路由方法注册路由。例如:return [ 'hello/:name

例如:

return [
 'hello/:name' => 'index/hello',
];

必须改成:

Route::get('hello/:name', 'index/hello');

多应用的路由定义文件位置

单应用模式下,路由定义文件和之前一样就在route目录下面,如果你的项目是采用了多应用的话,每个应用的路由定义和匹配都是独立的,也没有模块的概念,路由定义文件的位置应该是在route/应用子目录下面,例如:

route/index/route.php // index应用的路由定义文件
route/index/web.php // index应用的第二个路由定义文件
route/admin/route.php // admin应用的路由定义文件

默认的URL规则变成了

http://域名/入口文件(或者应用名)/控制器名/操作名

应用的路由规则其实是定义的入口文件(或者应用名)后面的URL部分,而不包含应用。

自动多应用

最新的5.2版本可以支持在同一个入口文件中访问多个不同的应用(之前必须每个应用添加一个对应的入口文件)。

例如在index.php入口文件中使用:

(new App())->autoMulti()->run()->send();

就可以不必创建入口文件自动通过URL访问多个应用

http://serverName/index.php/admin

如果你的默认应用不是index(默认为入口文件名),那么可以通过name方法指定默认应用。

(new App())->autoMulti()
 ->name('admin')
 ->run()
 ->send();

支持应用名的别名映射,例如:

(new App())->autoMulti([
 'think' => 'admin', // 把admin应用映射为think
])->run()->send();

如果需要对某个应用进行自定义,可以使用

(new App())->autoMulti([
 'admin' => function($app) {
 $app->debug(true)->useClassSuffix();
 }
])->run()->send();

取消别名路由

因为使用场景有限和性能开销问题,取消原来的别名路由功能,建议使用资源路由或者单独的路由替代。

取消快捷路由

因为使用场景有限和不太符合规范,取消了原来的控制器快捷路由功能。

取消空控制器和空操作

原来的空控制器和空操作功能已经取消,请使用MISS路由功能替代,而且可以支持给不同的路由分组设置MISS路由。同时废弃empty_controller配置。

取消控制器自动搜索

由于性能原因,取消了路由的多级控制器自动搜索功能,请在路由规则定义中明确指定要路由的多级控制器。

路由功能独立设计

路由功能不再固定执行,而且设计成为AppInit事件的响应监听,并且可以在项目的事件定义里面配置,系统默认的定义配置如下:

return [
 'bind' => [
 ],
 'listen' => [
 'AppInit' => [
 'thinklistenerLoadLangPack',
 'thinklistenerRouteCheck',
 ],
 'AppBegin' => [
 'thinklistenerCheckRequestCache',
 ],
 'ActionBegin' => [],
 'AppEnd' => [],
 'LogLevel' => [],
 'LogWrite' => [],
 'ResponseSend' => [],
 'ResponseEnd' => [],
 ],
 'subscribe' => [
 ],
];

在AppInit事件中会执行thinklistenerRouteCheck类,如果你的应用完全不需要使用任何的路由功能,可以在配置文件中取消定义即可,系统会执行默认的URL调度(也即是控制器/操作)。

取消注册方法的option和pattern参数

取消路由注册方法(包括rule/get/post/put/delete/patch/miss/group等方法)的option和pattern参数,全部改成方法调用形式,例如原来的:

Route::get('hello/:name', 'index/hello', [ 'ext' => 'html'], [ 'name' => 'w+']);

需要改成

Route::get('hello/:name', 'index/hello')
 ->ext('html')
 ->pattern([ 'name' => 'w+']);

路由分组定义不再支持数组

因为不利于分组的嵌套功能,路由分组定义不再支持数组,只能使用闭包方式定义,例如:

Route::group('blog', [
 ':id' => 'Blog/read',
 ':name' => 'Blog/read',
])->ext('html')->pattern(['id' => 'd+']);

必须改成

Route::group('blog', function() {
 Route::get(':id', 'Blog/read');
 Route::get(':name', 'Blog/read');
})->ext('html')->pattern(['id' => 'd+']);

如果你需要注册一个虚拟的路由分组,可以直接在第一个参数使用闭包

Route::group(function() {
 Route::get('blog/:id', 'Blog/read');
 Route::get('user/:name', 'User/read');
})->ext('html')->pattern(['id' => 'd+']);

取消了url_controller_layer配置

改为在入口文件中使用controllerLayer方法设置。

(new App())->controllerLayer('Action')
 ->run()
 ->send();

取消class_suffix配置

改为在入口文件中使用useClassSuffix方法设置。

(new App())->useClassSuffix(true)
 ->run()
 ->send();

同时取消controller_suffix和class_suffix配置参数。

取消mergeExtraVars方法和对应参数

改为在路由规则中明确指定变量规则。

header方法参数类型调整

由于强类型约束的原因,header方法改为仅支持数组参数传入。

使用强类型参数

由于全面启用强类型参数,并且使用严格模式,所以一定要注意参数的类型。

众多ThinkPHP入门教程,尽在PHP中文网,欢迎在线学习!

本文转自:https://blog.thinkphp.cn/916515

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

ThinkPHP5.2:路由的调整和改进

ThinkPHP5.2:路由的调整和改进:ThinkPHP5.2的路由部分,也和其它组件一样,做了精简和优化,主要包括如下方面:取消路由定义的返回数组形式因为不利于路由缓存生成,路由定义文件取消了返回数组的方式定义路由,必须采用路由方法注册路由。例如:return [ 'hello/:name
推荐度:
标签: 调整 5.2 路由
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top