Laravel 升级索引
从 5.3 升级到 5.4.0
预计升级耗时: 1-2 小时
我们尽量罗列出每一个不兼容的变更。但因为其中一些不兼容变更只存在于框架很不起眼的地方,事实上只有一小部分会真正影响到你的应用程序。
更新依赖
在 composer.json
文件中将你的 laravel/framework
更新为 5.4.*
。 此外, 你应该更新你的 phpunit/phpunit
依赖关系到 ~5.7
。
删除编译的服务文件
如果存在,你可以删除 bootstrap/cache/compiled.php
文件。 它不再被框架使用。
刷新缓存
升级所有软件包之后,你应该运行 php artisan view:clear
来避免与删除 Illuminate\View\Factory::getFirstLoop()
相关的 Blade 错误。此外,你需要运行 php artisan route:clear
来刷新路由缓存。
Laravel Cashier
Laravel Cashier 已经兼容 Laravel 5.4。
Laravel Passport
为了兼容 Laravel 5.4 和 Axios JavaScript 库,Laravel Passport 已经发布了 2.0.0
。如果你是从 Laravel 5.3 升级,并使用了预置的 Passport Vue 组件,你应该确保 Axios 库在你的应用程序中作为 axios
全局可用。
Laravel Scout
Laravel Scout 3.0.0
已经发布,以提供与 Laravel 5.4 的兼容性。
Laravel Socialite
Laravel Socialite 3.0.0
已经发布,以提供与 Laravel 5.4 的兼容性。
Laravel Tinker
为了继续使用 tinker
Artisan 命令,你还应该安装 laravel/tinker
包:
composer require laravel/tinker
一旦软件包被安装,你应该添加 Laravel\Tinker\TinkerServiceProvider::class
到 config/app.php
配置文件中的 providers
数组。
Guzzle
Laravel 5.4 需要 Guzzle 6.0或者更高版本。
授权
getPolicyFor
方法
在之前的版本中,调用 Gate::getPolicyFor($class)
方法的时候,如果没有找到对应的 policy,会抛出异常。 现在, 该方法在给定类中找不到policy的时候会返回 null
。 如果你直接调用这个方法,请确保你在重构代码中新增了对 null
的检查:
$policy = Gate::getPolicyFor($class);
if ($policy) {
// code that was previously in the try block
} else {
// code that was previously in the catch block
}
Blade
@section
转码
在 Laravel 5.4,传递给 section 的内联内容会自动进行转码:
@section('title', $content)
如果你想要在 section 中渲染原生内容,你必须使用传统的「长形式」声明该 section。
@section('title')
{!! $content !!}
@stop
引导程序
如果你在 HTTP 或 Console 启动类中手动覆盖了 $bootstrappers
数组,需要将 DetectEnvironment
重命名为 LoadEnvironmentVariables
。
广播
频道模型绑定
在 Laravel 5.3 中定义频道名称占位符时,使用 *
字符。在 Laravel 5.4 中, 你应该使用 {foo}
风格来定义这些占位符,如路由:
Broadcast::channel('App.User.{userId}', function ($user, $userId) {
return (int) $user->id === (int) $userId;
});
集合
every
方法
every
方法的功能被合并到 nth
方法中以匹配被 Lodash 定义的方法名。
random
方法
调用 $collection->random(1)
现在会返回一个包含单个item的新的集合实例。在之前版本中,这个方法会返回单个对象。如果没有提供参数,该方法将只返回单个对象。