发布说明
版本方案
Laravel 的版本方案遵循以下惯例:paradigm.major.minor
。主要框架版本每六个月发布一次(2 月和 8 月),而次要版本可能每周发布一次。次要版本绝不应包含破坏性更改。
当从您的应用程序或包中引用 Laravel 框架或其组件时,您应始终使用诸如 5.7.*
之类的版本约束,因为 Laravel 的主要版本确实包含破坏性更改。然而,我们始终努力确保您可以在一天或更短的时间内更新到新的主要版本。
范式转换版本相隔多年,代表框架架构和惯例的根本性转变。目前,没有正在开发的范式转换版本。
支持政策
对于 LTS 版本,例如 Laravel 5.5,提供 2 年的错误修复和 3 年的安全修复。这些版本提供最长的支持和维护窗口。对于一般版本,提供 6 个月的错误修复和 1 年的安全修复。对于所有其他库,包括 Lumen,只有最新版本会收到错误修复。
版本 | 发布 | 错误修复截止日期 | 安全修复截止日期 |
---|---|---|---|
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 年 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
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
中间件。此中间件可以附加到仅允许经过验证用户的路由:
'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
命令的集成。要开始,请运行 dump-server
Artisan 命令:
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
方法轻松“模拟”控制台命令的用户输入。此外,您可以使用 assertExitCode
和 expectsOutput
方法指定您期望控制台命令输出的退出代码和文本。例如,考虑以下控制台命令:
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.'.');
});
您可以使用以下测试来测试此命令,该测试利用了 expectsQuestion
、expectsOutput
和 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 生成器和可调用语法
Laravel 的 URL 生成器现在在生成指向控制器操作的 URL 时接受“可调用”语法,而不仅仅是字符串:
action([UserController::class, 'index']);
分页器链接
Laravel 5.7 允许您控制在分页器的 URL“窗口”每一侧显示的附加链接数量。默认情况下,在主要分页器链接的每一侧显示三个链接。但是,您可以使用 onEachSide
方法控制此数量:
{{ $paginator->onEachSide(5)->links() }}
文件系统读/写流
Laravel 的 Flysystem 集成现在提供 readStream
和 writeStream
方法:
Storage::disk('s3')->writeStream(
'remote-file.zip',
Storage::disk('local')->readStream('local-file.zip')
);