发行说明

版本控制方案

Laravel 的版本控制方案使用以下约定:大版本号.主版本号.次版本号。主版本每六个月发布(二月和八月),而次版本通常每周发布。次版本 应包含破坏性更改。

在应用或扩展包中引用 Laravel 框架或其组件时,应始终使用版本约束(例如 5.7.*),因为 Laravel 的主版本往往包含破坏性更改。不过,我们会尽量确保您可以在一天甚至更短时间内完成更新。

大版本的发布往往需要很多年,并代表着框架架构和约定发生了根本性变化。目前,还没有开发大版本的计划。

支持策略

对于 LTS(Long Term Support)版本(例如 Laravel 5.5),提供 2 年的 bug 修复和 3 年的安全修复支持。LTS 版本提供最长周期的支持和维护。对于一般版本,提供 6 个月的 bug 修复和 1 年的安全修复支持。

版本 发布时间 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 年 2 月 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 年 8 月 2019 年 2 月 2019 年 8 月

Laravel 5.7

Laravel 5.7 在 Laravel 5.6 的基础上继续改进:引入了 Laravel Nova,可选的邮箱验证脚手架,授权入口和授权策略支持对未登录用户授权,终端测试改进,集成了 Symfony 的 dump-server,本地化通知及其它 bug 修复和使用改进。

Laravel Nova

Laravel Nova 是一个漂亮、一流的 Laravel 后台管理面板。当然,Nova 的主要功能是使用 Eloquent 管理底层数据库。除此之外,Nova 还支持过滤器、自定义底层资源 Eloquent 查询、行为、队列操作、指标、授权、自定义工具、自定义卡片、自定义字段等。

了解有关 Laravel Nova 的更多信息,请查看 Nova 官网

邮箱验证

Laravel 5.7 在用户认证脚手架中引入了可选的邮箱验证支持。为了适应此功能,email_verified_at 时间戳字段被添加到了 users 表默认的迁移中 。

要提示新注册用户验证他们的邮箱,可以在 User 模型上实现 MustVerifyEmail 接口:

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements MustVerifyEmail
{
    // ...
}

User 模型实现 MustVerifyEmail 接口后,新注册的用户将收到一封包含签名的验证邮件。点击邮件中的验证链接后,Laravel 会自动在数据库中记录验证时间,并将用户重定向到您指定的页面。

verified 中间件已添加到应用默认的 HTTP 内核。您也可以将该中间件添加到只允许验证用户访问的路由上:

'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,

了解有关邮箱验证的更多信息,请查看 完整文档

游客入口/策略

在之前版本的 Laravel 中,未登录用户访问应用时,授权入口和授权策略会返回 false。但是,现在可以通过声明一个「可选」类型提示或者在定义用户参数时传递 null 默认值来允许游客通过授权检查:

Gate::define('update-post', function (?User $user, Post $post) {
    // ...
});

Symfony Dump Server

Laravel 5.7 使用 Marcel Pociot 发开的 扩展包 集成了 Symfony 的 dump-server 命令。首先,运行 Artisan 命令 dump-server

php artisan dump-server

启动服务后,所有 dump 的调用结果都会显示在 dump-server 终端窗口而不是浏览器中,以让您在不影响 HTTP 响应输出的情况下检查数据。

通知本地化

Laravel 现在可以使用当前语言以外的其它语言发送通知,甚至通知在队列中也会记住该语言。

为达到此目的,Illuminate\Notifications\Notification 类现在提供了一个 locale 方法来设置想要的语言。应用会在通知被格式化时更改为此语言,然后恢复到之前的语言:

$user->notify((new InvoicePaid($invoice))->locale('es'));

多通知的本地化也可通过 Notification Facade 实现:

Notification::locale('es')->send($users, new InvoicePaid($invoice));

终端测试

Laravel 5.7 可以使用 expectsQuestion 方法轻松「模拟」用户的终端输入。此外,还可以使用 assertExitCodeexpectsOutput 方法指定终端命令输出的退出码和文本。例如,假设终端命令如下:

Artisan::command('question', function () {
    $name = $this->ask('What is your name?');

    $language = $this->choice('Which language do you program in?', [
        'PHP',
        'Ruby',
        'Python',
    ]);

    $this->line('Your name is '.$name.' and you program in '.$language.'.');
});

可以利用 expectsQuestionexpectsOutput 还有 assertExitCode 方法测试此命令:

/**
 * 测试终端命令
 *
 * @return void
 */
public function test_console_command()
{
    $this->artisan('question')
         ->expectsQuestion('What is your name?', 'Taylor Otwell')
         ->expectsQuestion('Which language do you program in?', 'PHP')
         ->expectsOutput('Your name is Taylor Otwell and you program in PHP.')
         ->assertExitCode(0);
}

URL 生成器 & Callable 语法

当为控制器操作生成 URL 时,Laravel 的 URL 生成器除了支持字符串,现在还支持「Callable」语法:

action([UserController::class, 'index']);

分页链接

Laravel 5.7 可以指定分页的每一边有多少个分页链接。默认情况下,主分页按钮的两边各有 3 个链接。现在可以使用 onEachSide 方法控制该数目:

{{ $paginator->onEachSide(5)->links() }}

文件系统的读取/写入流

Laravel 的 Flysystem 集成现在提供了 readStreamwriteStream 方法:

Storage::disk('s3')->writeStream(
    'remote-file.zip',
    Storage::disk('local')->readStream('local-file.zip')
);