发行说明
版本控制方案
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
方法轻松「模拟」用户的终端输入。此外,还可以使用 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 生成器 & Callable 语法
当为控制器操作生成 URL 时,Laravel 的 URL 生成器除了支持字符串,现在还支持「Callable」语法:
action([UserController::class, 'index']);
分页链接
Laravel 5.7 可以指定分页的每一边有多少个分页链接。默认情况下,主分页按钮的两边各有 3 个链接。现在可以使用 onEachSide
方法控制该数目:
{{ $paginator->onEachSide(5)->links() }}
文件系统的读取/写入流
Laravel 的 Flysystem 集成现在提供了 readStream
和 writeStream
方法:
Storage::disk('s3')->writeStream(
'remote-file.zip',
Storage::disk('local')->readStream('local-file.zip')
);