发行说明

未匹配的标注
本文档最新版为 11.x,旧版本可能放弃维护,推荐阅读最新版!

发行说明#

版本控制方案#

Laravel 的版本控制方案使用以下约定: 主版本号.次版本号.修订号。次版本号框架每六个月(二月和八月)发布,而修订号版本可能每周发布一次,修订号版本 包含重大更改。

当你从应用程序中或者在包中引用 Laravel 框架或者其他组件时,应该始终使用版本约束,例如 5.7.*,因为 Laravel 的次要版本包含重大更改。但是,我们会努力确保你可以在一天或者更短时间内完成更新。

主要版本之间的发布往往需要很多年,每次发布代表框架架构和底层结构发生了根本的改变。而目前并没有准备开发主版本号的计划。

支持策略#

对于 LTS 版本,例如 5.5,提供两年的错误修复和三年的安全修复。这些版本提供最长时间的支持和维护。对于一般版本,则只是提供六个月的错误修复和一年的安全修复。

版本 发布时间 Bug 修复截止时间 安全修复截止时间
5.0 2015 年 2 月 4 日 2015 年 8 月 4 日 2016 年 2 月 4 日
5.1 (LTS) 2015 年 6 月 9 日 2017 年 6 月 9 日 2018 年 6 月 9 日
5.2 2015 年 12 月 21 日 2016 年 6 月 21 日 2016 年 12 月 21 日
5.3 2016 年 8 月 23 日 2017 年 9 月 23 日 2017 年 8 月 23 日
5.4 2017 年 1 月 24 日 2017 年 7 月 24 日 2018 年 1 月 24 日
5.5 (LTS) 2017 年 8 月 30 日 2019 年 8 月 30 日 2020 年 8 月 30 日
5.6 2018 年 2 月 7 日 2018 年 8 月 7 日 2019 年 2 月 7 日
5.7 2018 年 9 月 4 日 2019 年 3 月 4 日 2019 年 9 月 4 日
5.8 2019 年 2 月 26 日 2019 年 8 月 26 日 2020 年 2 月 26 日

Laravel 5.8#

Laravel 5.8 在 Laravel 5.7 的基础上继续进行优化,包括引入新的 Eloquent 关联关系(has-one-through)、优化邮箱验证、基于约定的授权策略类自动注册、 DynamoDB 缓存及 Session 驱动、优化任务调度器的时区配置、支持分配多个认证 guard 到广播频道、PSR-16 缓存驱动规范、优化 artisan serve 命令、支持 PHPUnit 8.0、支持 Carbon 2.0 、支持 Pheanstalk 4.0 ,以及多个 bug 修复和可用性的提升。

Eloquent HasOneThrough 关联关系#

Eloquent 现在提供了对 hasOneThrough 关联类型的支持。例如,假设 Supplier 模型类与 Account 模型类之间是一对一关联,并且 Account 模型类与 AccountHistory 模型类之间也是一对一关联,那么 Supplier 模型类与 AccountHistory 模型类之间可以通过 hasOneThrough 方法基于 Account 模型类建立远层的一对一关联。你可以用 hasOneThrough 关联关系通过 Account 模型类访问 AccountHistory 模型类:

/**
 * Get the account history for the supplier.
 */
public function accountHistory()
{
    return $this->hasOneThrough(AccountHistory::class, Account::class);
}

自动寻找模型策略#

当使用 Laravel 5.7 时,每个模型对应的 认证策略 都需要被显式地注册到应用的 AuthServiceProvider 中:

/**
 * 当前应用的策略对应关系
 *
 * @var array
 */
protected $policies = [
    'App\User' => 'App\Policies\UserPolicy',
];

Laravel 5.8 引进了模型策略的自动寻找,只要模型和策略的命名符合 Laravel 的标准约定。即策略必须在 Policies 路径下,该路径之上包含模型。举个例子,模型可能放在 app 路径下,则策略可以在放 app/Policies 路径下。另外,策略名称必须匹配模型名称并且加上 Policy 后缀。这样, User 模型将会对应上 UserPolicy 类。

如果你想要提供自己的策略寻找逻辑,你可以使用 Gate::guessPolicyNamesUsing 方法来注册一个自定义的回调函数。通常来说,这个方法应该从你应用的 AuthServiceProvider 中被调用:

use Illuminate\Support\Facades\Gate;

Gate::guessPolicyNamesUsing(function ($modelClass) {
    // return policy class name...
});

注意:任何被显式地映射到 AuthServiceProvider 中的策略都将优先于隐式自动寻找策略。

PSR-16 缓存规范#

为了在存储缓存项时允许更细粒度的过期时间并遵守 PSR-16 缓存标准,我们将缓存项的有效期单位从分钟调整到秒。Illuminate\Cache\Repository 及其扩展类的 putputManyaddremembersetDefaultCacheTime 方法以及每个缓存存储实现类的 put 方法对应的有效期单位都做了这样的调整。可以查看 相关的 PR 了解更多细节。

如果你的代码中调用了上述方法,需要对相应代码进行更新以确保现在传递的有效期时间与之前一致(单位变成了秒,而不是之前的分钟),作为替代方案,你还可以传递一个 DateTime 实例来标识缓存项的过期时间:

// Laravel 5.7 - 缓存30分钟...
Cache::put('foo', 'bar', 30);

// Laravel 5.8 - 缓存30秒...
Cache::put('foo', 'bar', 30);

// Laravel 5.7 / 5.8 - 缓存30秒...
Cache::put('foo', 'bar', now()->addSeconds(30));

多个广播认证看守器#

在 Laravel 之前发行的版本中,私有和到场广播频道通过应用的默认认证 guard 对用户进行认证。从 Laravel 5.8 开始,你可以分配多个 guard 来对请求进行认证:

Broadcast::channel('channel', function() {
    // ...
}, ['guards' => ['web', 'admin']])

Token Guard 令牌哈希算法#

Laravel 中提供基本 API 认证的 token guard,现在支持以 SHA-256 哈希算法对 API 令牌进行存储。这比存储纯文本令牌更加安全。要了解更多有关哈希令牌的细节,请查阅完整的 API 认证文档

注: 即便 Laravel 提供了一个关简单的、基于令牌的认证 guard ,考虑到健壮性和提供了 API 认证的线上应用,我们强烈推荐你使用 Laravel Passport

改进 Email 验证器#

Laravel 5.8 采用了 SwiftMailer 的 egulias/email-validator 包,改进了 email 验证器的验证逻辑。之前的 Laravel Email 验证逻辑认为有效的邮件地址,比如 example@bär.se,现在可能会被判定无效。

默认定时任务时区#

Laravel 允许用户使用 timezone 方法来自定义定时任务的时区:

$schedule->command('inspire')
         ->hourly()
         ->timezone('America/Chicago');

如果你为每个定时任务都定义一个时区的话,这样会比较繁琐与麻烦。更简便的方法是在 app/Console/Kernel.php 文件内定义一个 schedule Timezone 方法。这个方法将会把默认时区返回给所有的定时任务:

/**
 * 获取默认定时任务时区。
 *
 * @return \DateTimeZone|string|null
 */
protected function scheduleTimezone()
{
    return 'America/Chicago';
}

中间表 /pivot 模型事件#

在之前版本的 Laravel 中,当附着,分离或同自定义中间表 / 多对多关系的 “pivot” 模型时 Eloquent 模型事件不会被派遣。在现在的 Laravel 5.8 中,使用 定制中间表模型 时,这些事件都将被派遣。

Artisan 调用改进#

Laravel 允许你通过 Artisan::call 方法来调用 Artisan 。在之前发布的 Laravel 中,命令的选项是通过一个数组作为第二个参数来传递到方法中的:

use Illuminate\Support\Facades\Artisan;

Artisan::call('migrate:install', ['database' => 'foo']);

然而,Laravel 5.8 允许你传递完整的命令,包括其选项。它将作为第一个字符串参数到方法中:

Artisan::call('migrate:install --database=foo');

Mock / Spy 测试辅助方法#

为了创建模拟对象更加方便, 新的 mockspy 方法已经加入到基础 Laravel 测试用例中。这些方法自动的绑定模拟类到容器中。例如:

// Laravel 5.7
$this->instance(Service::class, Mockery::mock(Service::class, function ($mock) {
    $mock->shouldReceive('process')->once();
}));

// Laravel 5.8
$this->mock(Service::class, function ($mock) {
    $mock->shouldReceive('process')->once();
});

Eloquent 资源键保持#

当从路由中返回 Eloquent 资源集合 时, Laravel 会重置集合的键以使他们按简单的数字顺序排列:

use App\User;
use App\Http\Resources\User as UserResource;

Route::get('/user', function () {
    return UserResource::collection(User::all());
});

当使用 Laravel 5.8 时, 你可以添加一个 preserveKeys 属性到资源类表明资源类的键是否保留。默认情况下,为了和之前版本的 Laravel 保持一致,这些键会被重置:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class User extends JsonResource
{
    /**
     * Indicates if the resource's collection keys should be preserved.
     *
     * @var bool
     */
    public $preserveKeys = true;
}

preserveKeys 的属性值设置为 true 时, 集合键会被保留:

use App\User;
use App\Http\Resources\User as UserResource;

Route::get('/user', function () {
    return UserResource::collection(User::all()->keyBy->id);
});

高阶 orWhere Eloquent 方法#

在之前发布的 Laravel 中,通过 or query 操作符来合并多个 Eloquent 模型作用域须使用闭包回调:

// scopePopular 和 scopeActive 方法定义在 User 模型中...
$users = App\User::popular()->orWhere(function (Builder $query) {
        $query->active();
})->get();

Lavavel 5.8 引进了 「高阶」 orWhere 方法,使你可以不用闭包,从而实现对作用域的流畅链式调用。

$users = App\User::popular()->orWhere->active()->get();

Artisan Serve 改进#

在之前发布的 Laravel 中,Artisan 的 serve 方法会启动你的应用服务,监听 8000 端口。 如果一个 serve 命令进程已经启动并占用了这个端口,那么通过 serve 命令尝试启动第二个应用服务将会失败。从 Laravel 5.8 起, serve 会扫描可用的端口直到 8009 ,让你可以同时启动多个应用服务。

模板文件映射#

当编译 Blade 模板时,Laravel 现在会在编译文件的顶部添加注释,其中包含原始 Blade 模板路径。

DynamoDB 缓存 / Session 驱动#

Laravel 5.8 引入了 DynamoDB 缓存和 session 驱动。DynamoDB 是 Amazon Web Services 提供的无服务器 NoSQL 数据库。默认的 dynamodb 缓存驱动配置可以在 Laravel 5.8 的 缓存配置文件 中找到。

Carbon 2.0 支持#

Laravel 5.8 提供对 Carbon 日期处理库 ~2.0 发行版本的支持。

Pheanstalk 4.0 支持#

Laravel 5.8 提供对 Pheanstalk 队列库 ~4.0 发行版本的支持。如果你的应用正在使用 Pheanstalk 库,请通过 Composer 升级该库到 ~4.0 发行版。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/laravel/5.8/rel...

译文地址:https://learnku.com/docs/laravel/5.8/rel...

上一篇 下一篇
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
贡献者:10
讨论数量: 0
发起讨论 查看所有版本


暂无话题~