Skip to content

发布说明

版本方案

Laravel 的版本方案遵循以下惯例:paradigm.major.minor。主要框架版本每六个月发布一次(2 月和 8 月),而次要版本可能每周发布一次。次要版本绝不应包含破坏性更改。

当从您的应用程序或包中引用 Laravel 框架或其组件时,您应始终使用诸如 5.7.* 之类的版本约束,因为 Laravel 的主要版本确实包含破坏性更改。然而,我们始终努力确保您可以在一天或更短的时间内更新到新的主要版本。

范式转换版本相隔多年,代表框架架构和惯例的根本性转变。目前,没有正在开发的范式转换版本。

支持政策

对于 LTS 版本,例如 Laravel 5.5,提供 2 年的错误修复和 3 年的安全修复。这些版本提供最长的支持和维护窗口。对于一般版本,提供 6 个月的错误修复和 1 年的安全修复。对于所有其他库,包括 Lumen,只有最新版本会收到错误修复。

版本发布错误修复截止日期安全修复截止日期
5.02015 年 2 月 4 日2015 年 8 月 4 日2016 年 2 月 4 日
5.1 (LTS)2015 年 6 月 9 日2017 年 6 月 9 日2018 年 6 月 9 日
5.22015 年 12 月 21 日2016 年 6 月 21 日2016 年 12 月 21 日
5.32016 年 8 月 23 日2017 年 2 月 23 日2017 年 8 月 23 日
5.42017 年 1 月 24 日2017 年 7 月 24 日2018 年 1 月 24 日
5.5 (LTS)2017 年 8 月 30 日2019 年 8 月 30 日2020 年 8 月 30 日
5.62018 年 2 月 7 日2018 年 8 月 7 日2019 年 2 月 7 日
5.72018 年 9 月 4 日2019 年 3 月 4 日2019 年 9 月 4 日

Laravel 5.7

Laravel 5.7 通过引入 Laravel Nova、身份验证脚手架的可选电子邮件验证、授权门和策略中的访客用户支持、控制台测试改进、Symfony dump-server 集成、本地化通知以及各种其他错误修复和可用性改进,继续了 Laravel 5.6 的改进。

Laravel Nova

Laravel Nova 是一个美观的、最佳的 Laravel 应用程序管理仪表板。Nova 的主要功能是能够使用 Eloquent 管理底层数据库记录。此外,Nova 提供对过滤器、镜头、操作、排队操作、指标、授权、自定义工具、自定义卡片、自定义字段等的支持。

要了解有关 Laravel Nova 的更多信息,请访问 Nova 网站

电子邮件验证

Laravel 5.7 为框架中包含的身份验证脚手架引入了可选的电子邮件验证。为了适应此功能,已在框架中包含的默认 users 表迁移中添加了 email_verified_at 时间戳列。

要提示新注册用户验证其电子邮件,User 模型应标记为 MustVerifyEmail 接口:

php
<?php

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 将自动记录数据库中的验证时间并将用户重定向到您选择的位置。

在默认应用程序的 HTTP 内核中添加了一个 verified 中间件。此中间件可以附加到仅允许经过验证用户的路由:

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

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

访客用户门/策略

在以前版本的 Laravel 中,授权门和策略会自动为应用程序的未认证访问者返回 false。然而,您现在可以通过声明“可选”类型提示或为用户参数定义提供 null 默认值来允许访客通过授权检查:

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

Symfony Dump Server

Laravel 5.7 通过 Marcel Pociot 的一个包 提供与 Symfony 的 dump-server 命令的集成。要开始,请运行 dump-server Artisan 命令:

php
php artisan dump-server

服务器启动后,所有对 dump 的调用将显示在 dump-server 控制台窗口中,而不是在浏览器中,允许您在不破坏 HTTP 响应输出的情况下检查值。

通知本地化

Laravel 现在允许您以当前语言以外的语言发送通知,并且如果通知被排队,还会记住此语言。

为此,Illuminate\Notifications\Notification 类现在提供了一个 locale 方法来设置所需的语言。当通知正在格式化时,应用程序将更改为此语言,然后在格式化完成后恢复到先前的语言:

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

通过 Notification facade 也可以实现多个可通知条目的本地化:

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

控制台测试

Laravel 5.7 允许您使用 expectsQuestion 方法轻松“模拟”控制台命令的用户输入。此外,您可以使用 assertExitCodeexpectsOutput 方法指定您期望控制台命令输出的退出代码和文本。例如,考虑以下控制台命令:

php
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.'.');
});

您可以使用以下测试来测试此命令,该测试利用了 expectsQuestionexpectsOutputassertExitCode 方法:

php
/**
 * 测试控制台命令。
 *
 * @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 生成器和可调用语法

Laravel 的 URL 生成器现在在生成指向控制器操作的 URL 时接受“可调用”语法,而不仅仅是字符串:

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

分页器链接

Laravel 5.7 允许您控制在分页器的 URL“窗口”每一侧显示的附加链接数量。默认情况下,在主要分页器链接的每一侧显示三个链接。但是,您可以使用 onEachSide 方法控制此数量:

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

文件系统读/写流

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

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