发行说明

版本控制方案

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

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

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

支持策略

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

版本发布时间Bug 修复截止时间安全修复截止时间
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年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 还提供对过滤器,镜头,行为,队列操作,指标,授权,自定义工具,自定义卡片,自定义字段等更多支持。

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

邮箱验证

Laravel5.7 为框架中包含身份验证的脚手架提供了可选的电子邮件验证。为了适应该特性,已经将 email_verified_at 时间戳字段添加到框架默认的 users 表的迁移文件中。

为了提示新注册的用户验证他们的邮件,User 模型应该实现 MustVerifyEmail 接口:

  1. <?php
  2. namespace App;
  3. use Illuminate\Notifications\Notifiable;
  4. use Illuminate\Contracts\Auth\MustVerifyEmail;
  5. use Illuminate\Foundation\Auth\User as Authenticatable;
  6. class User extends Authenticatable implements MustVerifyEmail
  7. {
  8. // ...
  9. }

一旦 User 模型实现 MustVerifyEmail 接口,新注册的用户将收到一封包含签名验证链接的电子邮件。点击此链接后,Laravel 将自动在数据库中记录验证时间,并将用户跳转到你刚才的页面。

verified 中间件默认添加在应用程序的 HTTP 内核中。这个中间件可以添加到只允许通过验证的用户的路由:

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

{tip} 想了解有关电子邮件验证的详情,请查看 完整文档

访客 入口 / 策略

在以前版本的 Laravel 中,授权入口和策略字段为您的应用程序验证未授权的访客并返回 false。现在,你可以通过声明"可选"类型提示或为用户参数定义提供 null 默认值来允许访客通过授权检查:

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

Symfony Dump Server

Laravel5.7 通过 a package by Marcel Pociot 提供 Symfony 的 dump-server 命令集成。运行 dump-server 的 Artisan 命令来启动:

  1. php artisan dump-server

一旦服务启动,所有对 dump 命令的调用只会显示的 dump-server 控制台窗口,而不是浏览器中,以提供在不破坏 HTTP 响应输出的情况下检查数据。

通知本地化

Laravel 现在可以使用当前语言环境之外的语言发送通知,如果通知是在队列化状态下发送的话,它甚至可以记住这个语言环境。

为了实现这个功能, Illuminate\Notifications\Notification 类目前提供了一个 locale 方法来设置所需的语言。在格式化通知时,应用程序会将语言环境设置为此语言,格式化完毕之后恢复为之前的:

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

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

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

控制台测试

Laravel 5.7 可使用 expectsQuestion 方法轻松模拟用户的控制台输入。此外,你也可以通过 assertExitCodeexpectsOutput 方法来指定退出代码和期望输出的文本。 例如,考量如下控制台命令代码:

  1. Artisan::command('question', function () {
  2. $name = $this->ask('What is your name?');
  3. $language = $this->choice('Which language do you program in?', [
  4. 'PHP',
  5. 'Ruby',
  6. 'Python',
  7. ]);
  8. $this->line('Your name is '.$name.' and you program in '.$language.'.');
  9. });

可以使用如下带有 expectsQuestionexpectsOutput,还有 assertExitCode 方法的测试用例,来测试上述控制台命令:

  1. /**
  2. * Test a console command.
  3. *
  4. * @return void
  5. */
  6. public function test_console_command()
  7. {
  8. $this->artisan('laracon')
  9. ->expectsQuestion('What is your name?', 'Taylor Otwell')
  10. ->expectsQuestion('Which language do you program in?', 'PHP')
  11. ->expectsOutput('Your name is Taylor Otwell and you program in PHP.')
  12. ->assertExitCode(0);
  13. }

URL 生成器 & 回调语法

在给定控制器生成 URL 行为时,Laravel 的 URL 生成器不仅可以支持字符串传值形式,现在也可支持「回调」的语法了 :

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

分页器链接

Laravel 5.7 可以自由控制在分页器的 URL「窗口」添加多少个链接。默认在主分页链接的两侧各有三个链接。但是,你可以使用onEachSide 方法来控制这个数量:

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

文件系统的读/写流

Laravel 的文件系统这次提供了 readStreamwriteStream 方法:

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

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

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