按這成為會員 登錄
比思論壇 返回首頁

xing797的個人空間 http://108.170.5.99:8080/?2657108 [收藏] [複製] [分享] [RSS]

日誌

[ Laravel 5.6 文档 ] 序言 —— 升级指南

已有 2887 次閱讀2018-8-24 09:05

PHP

Laravel 5.6 需要 PHP 7.1.3 或更高版本。

更新依赖

在 composer.json 中更新 laravel/framework 依赖到 5.6.*,更新 fideloper/proxy 依赖到 ~4.0。

此外,如果你使用下以下官方扩展包,也要升级它们到最新版本:

  • Dusk (升级到 ~3.0)
  • Passport (升级到 ~5.0)
  • Scout (升级到 ~4.0)

当然,不要忘了检查应用所使用的第三方扩展包是否支持 Laravel 5.6,如果需要升级的话也要更新。

Symfony 4

Laravel 底层使用的所有 Symfony 组件都已经升级到 Symfony ~4.0 版本。如果你在应用代码中使用了 Symfony 组件,需要查看 Symfony 更新日志以确认是否需要修改代码。

PHPUnit

需要更新应用的 phpunit/phpunit 依赖到 ~7.0。

数组

Arr::wrap 方法

在 Laravel 5.6 中,传递 null 到 Arr::wrap 方法将会返回空数组。

Artisan

optimize 命令

之前版本中废弃的 optimize 命令已经被彻底移除。由于 PHP 自身的性能优化,optimize 命令已经不能给应用提供显著的性能提升,所以,你需要从 composer.json 文件的 scripts 部分移除 php artisan optimize。

Blade

HTML 实体编码

在之前版本的 Laravel 中,Blade 不会对 HTML 实体进行双重编码。这并不是底层 htmlspecialchars 函数的默认行为,而且会在渲染内容或传递内联 JSON 内容到 JavaScript 框架时导致预期之外的结果。

在 Laravel 5.6 中,Blade 以及辅助函数 e 默认会对特殊字符进行双重编码,从而与 PHP 底层 htmlspecialchars 函数的默认行为保持一致。如果你想要维持不进行双重编码的旧状,可以使用 Blade::withoutDoubleEncoding 方法:

<?php namespace App\Providers; use Illuminate\Support\Facades\Blade; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { Blade::withoutDoubleEncoding(); } } 缓存

频率限制器 tooManyAttempts 方法

该方法签名中未使用的 $decayMinutes 参数被移除。如果你通过自己的实现重写了该方法,也要从方法签名中移除该参数。

数据库

Morph 列的索引顺序

为了获得更好的性能,迁移方法 morphs 构建的列索引顺序倒过来了,如果你在某个迁移中使用了 morphs 方法,尝试运行该迁移的 down 方法时会报错。如果应用还在开发中,可以使用 migrate:fresh 命令重构数据库结构;如果应用已经上线,需要显式传递索引名称到 morphs 方法。

MigrationRepositoryInterface 新增方法

MigrationRepositoryInterface 中新增了一个 getMigrationsBatches 方法。如果非常不巧你正在自定义该类的实现,需要添加这个方法的实现。你可以以框架的默认实现作为示例。

Eloquent

getDateFormat 方法

getDateFormat 方法的可见性从 protected 调整为 public。

哈希

新配置文件

所有哈希配置现在位于独立的 config/hashing.php 配置文件。你可以拷贝一份默认配置文件到你的应用。大多数情况下,我们都会将 bcrypt 驱动作为默认驱动。不过,也支持 argon。

辅助函数

e

在之前版本的 Laravel 中,Blade (以及辅助函数 e)不会对 HTML 实体进行双重编码。这并不是底层 htmlspecialchars 函数的默认行为,而且会在渲染内容或传递内联 JSON 内容到 JavaScript 框架时导致预期之外的结果。

在 Laravel 5.6 中,Blade 以及辅助函数 e 默认会对特殊字符进行双重编码,从而与 PHP 底层 htmlspecialchars 函数的默认行为保持一致。如果你想要维持不进行双重编码的旧状,可以传递 false 作为第二个参数到 e 函数:

<?php echo e($string, false); ?> 日志

新配置文件

所有的日志配置现在都存放在独立的 config/logging.php 配置文件。你可以拷贝一份默认的配置文件到你的应用然后基于应用需要进行设置。

log 和 log_level 配置项都可以从配置文件 config/app.php 里移除了。

configureMonologUsing 方法

如果你在使用 configureMonologUsing 方法为应用自定义 Monolog 实例,现在需要创建一个 custom 日志频道。更多关于如何创建自定义频道的信息,可以查看完整的日志文档

日志 Writer 类

Illuminate\Log\Writer 类被重命名为 Illuminate\Log\Logger,如果你在应用的某个类中对这个类进行了显式的类型提示作为依赖注入,需要更新该类的引用为新的类名。或者,作为替代方案,你可以考虑将类型提示调整为标准的 Psr\Log\LoggerInterface 接口。

Illuminate\Contracts\Logging\Log 接口

该接口已经被移除,因为它和 Psr\Log\LoggerInterface 接口完全重合,需要将引用它的地方都调整为 Psr\Log\LoggerInterface 接口。

邮件

withSwiftMessage 回调

在之前版本的 Laravel 中,使用 withSwiftMessage 注册的 Swift 消息自定义回调函数在内容已经被编码并添加到消息后被调用。这些回调现在在内容被添加前调用,从而允许你自定义编码以及其他消息选项。

分页

Bootstrap 4

分页器生成的分页链接现在默认使用 Bootstrap 4,要让分页器生成 Bootstrap 3 链接,需要在 AppServiceProvider 的 boot 方法中调用 Paginator::useBootstrapThree 方法:

<?php namespace App\Providers; use Illuminate\Pagination\Paginator; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { Paginator::useBootstrapThree(); } } 资源

original 属性

资源响应的 original 属性现在被设置为原始模型而不是 JSON 字符串/数组。这样在测试中就可以更好地检查响应的模型。

路由

返回新创建的模型

从路由中直接返回新创建的 Eloquent 模型时,响应状态码由 200 调整为 201,如果应用的任意相应测试显式期望 200 状态码,那么需要将它们修改为 201。

信任代理

由于信任代码功能使用的底层 Symfony HttpFoundation 有改动,所以必须微调 App\Http\Middleware\TrustProxies中间件。

$headers 属性之前是个数组,现在是一个接收几个不同值的属性。例如,要信任所有转发头,需要像这样更新 $headers 属性:

use Illuminate\Http\Request; /** * The headers that should be used to detect proxies. * * @var string */ protected $headers = Request::HEADER_X_FORWARDED_ALL;

更多关于 $headers 变量值的信息可以查看完整的信任代理文档

验证

ValidatesWhenResolved 接口

为了避免和 $request->validate() 方法冲突,ValidatesWhenResolved 接口/trait 的 validate 方法被重命名为 validateResolved。

杂项

我们还鼓励你查看 laravel/laravel 代码仓库的更新日志。尽管其中的很多更新不是必须的,但是你可以将应用中的这些文件与代码仓库保持同步。其中的一些更新已经在这篇升级指南中覆盖到了,但是还有很多其他的小更新比如配置文件或注释的微调,就不会一一指出。你可以通过 GitHub 比较工具 轻松查看变更以便选择那些对你而言更为重要的更新。

全部作者的其他最新日誌

評論 (0 個評論)

facelist doodle 塗鴉板

您需要登錄後才可以評論 登錄 | 按這成為會員

重要聲明:本論壇是以即時上載留言的方式運作,比思論壇對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,讀者及用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,讀者及用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本論壇受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者及用戶發現有留言出現問題,請聯絡我們比思論壇有權刪除任何留言及拒絕任何人士上載留言 (刪除前或不會作事先警告及通知 ),同時亦有不刪除留言的權利,如有任何爭議,管理員擁有最終的詮釋權。用戶切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。

手機版| 廣告聯繫

GMT+8, 2024-11-26 07:26 , Processed in 1.013474 second(s), 18 queries , Gzip On.

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回頂部