发布说明
版本方案
Laravel 的版本方案遵循以下惯例:paradigm.major.minor
。主要框架版本每六个月发布一次(2 月和 8 月),而次要版本可能每周发布一次。次要版本绝不应包含破坏性更改。
当从您的应用程序或包中引用 Laravel 框架或其组件时,您应始终使用诸如 5.5.*
之类的版本约束,因为 Laravel 的主要版本确实包含破坏性更改。然而,我们始终努力确保您可以在一天或更短的时间内更新到新的主要版本。
范式转换版本相隔多年,代表框架架构和惯例的根本性转变。目前,没有正在开发的范式转换版本。
支持政策
对于 LTS 版本,例如 Laravel 5.5,提供 2 年的错误修复和 3 年的安全修复。这些版本提供最长的支持和维护窗口。对于一般版本,提供 6 个月的错误修复和 1 年的安全修复。
版本 | 发布 | 错误修复截止日期 | 安全修复截止日期 |
---|---|---|---|
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 日 |
Laravel 5.6
Laravel 5.6 继续改进 Laravel 5.5,通过添加改进的日志系统、单服务器任务调度、模型序列化改进、动态速率限制、广播频道类、API 资源控制器生成、Eloquent 日期格式化改进、Blade 组件别名、Argon2 密码哈希支持、包含 Collision 包等。此外,所有前端脚手架已升级到 Bootstrap 4。
Laravel 使用的所有底层 Symfony 组件已升级到 Symfony ~4.0
版本系列。
Laravel 5.6 的发布与 Spark 6.0 的发布同时进行,这是自 Laravel Spark 发布以来的首次重大升级。Spark 6.0 引入了 Stripe 和 Braintree 的按座定价、本地化、Bootstrap 4、增强的 UI 和 Stripe Elements 支持。
本文档总结了框架的最显著改进;然而,更详细的变更日志始终可在 GitHub 上找到。
日志改进
Laravel 5.6 带来了对 Laravel 日志系统的重大改进。所有日志配置都存放在新的 config/logging.php
配置文件中。您现在可以轻松构建将日志消息发送到多个处理程序的日志“堆栈”。例如,您可以将所有 debug
级别的消息发送到系统日志,同时将 error
级别的消息发送到 Slack,以便您的团队可以快速响应错误:
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['syslog', 'slack'],
],
],
此外,现在更容易使用日志系统的新“tap”功能自定义现有日志频道。有关更多信息,请查看 完整的日志文档。
单服务器任务调度
要使用此功能,您的应用程序必须使用 memcached
或 redis
缓存驱动作为应用程序的默认缓存驱动。此外,所有服务器必须与同一个中央缓存服务器通信。
如果您的应用程序在多台服务器上运行,您现在可以限制计划任务仅在一台服务器上执行。例如,假设您有一个计划任务,每周五晚上生成一份新报告。如果任务调度程序在三台工作服务器上运行,则计划任务将在所有三台服务器上运行并生成三次报告。这不好!
要指示任务仅在一台服务器上运行,您可以在定义计划任务时使用 onOneServer
方法。第一个获取任务的服务器将对作业获得原子锁,以防止其他服务器在同一个 Cron 周期内运行相同的任务:
$schedule->command('report:generate')
->fridays()
->at('17:00')
->onOneServer();
动态速率限制
在 Laravel 的先前版本中为一组路由指定 速率限制 时,您必须提供一个硬编码的最大请求数:
Route::middleware('auth:api', 'throttle:60,1')->group(function () {
Route::get('/user', function () {
//
});
});
在 Laravel 5.6 中,您可以根据经过身份验证的 User
模型的属性指定动态请求最大值。例如,如果您的 User
模型包含一个 rate_limit
属性,您可以将属性名称传递给 throttle
中间件,以便用于计算最大请求数:
Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
Route::get('/user', function () {
//
});
});
广播频道类
如果您的应用程序正在消费许多不同的频道,您的 routes/channels.php
文件可能会变得臃肿。因此,您现在可以使用频道类而不是使用闭包来授权频道。要生成频道类,请使用 make:channel
Artisan 命令。此命令将在 App/Broadcasting
目录中放置一个新的频道类。
php artisan make:channel OrderChannel
接下来,在 routes/channels.php
文件中注册您的频道:
use App\Broadcasting\OrderChannel;
Broadcast::channel('order.{order}', OrderChannel::class);
最后,您可以将频道类的 join
方法中放置频道的授权逻辑。此 join
方法将包含您通常放置在频道授权闭包中的相同逻辑。当然,您也可以利用频道模型绑定:
<?php
namespace App\Broadcasting;
use App\User;
use App\Order;
class OrderChannel
{
/**
* 创建一个新的频道实例。
*
* @return void
*/
public function __construct()
{
//
}
/**
* 验证用户对频道的访问权限。
*
* @param \App\User $user
* @param \App\Order $order
* @return array|bool
*/
public function join(User $user, Order $order)
{
return $user->id === $order->user_id;
}
}
API 控制器生成
在声明将由 API 消费的资源路由时,您通常希望排除呈现 HTML 模板的路由,例如 create
和 edit
。要生成不包含这些方法的资源控制器,您现在可以在执行 make:controller
命令时使用 --api
开关:
php artisan make:controller API/PhotoController --api
模型序列化改进
在 Laravel 的先前版本中,排队的模型不会与其加载的关系一起恢复。在 Laravel 5.6 中,当作业由队列处理时,排队时加载的关系会自动重新加载。
Eloquent 日期格式化
您现在可以单独自定义 Eloquent 日期转换列的格式。要开始,请在转换声明中指定所需的日期格式。一旦指定,此格式将在将模型序列化为数组/JSON 时使用:
protected $casts = [
'birthday' => 'date:Y-m-d',
'joined_at' => 'datetime:Y-m-d H:00',
];
Blade 组件别名
如果您的 Blade 组件存储在子目录中,您现在可以为其设置别名以便于访问。例如,假设一个 Blade 组件存储在 resources/views/components/alert.blade.php
。您可以使用 component
方法将组件从 components.alert
别名为 alert
:
Blade::component('components.alert', 'alert');
一旦组件被别名,您可以使用指令渲染它:
@alert('alert', ['type' => 'danger'])
您无权访问此资源!
@endalert
如果组件没有其他插槽,您可以省略组件参数:
@alert
您无权访问此资源!
@endalert
Argon2 密码哈希
如果您正在 PHP 7.2.0 或更高版本上构建应用程序,Laravel 现在支持通过 Argon2 算法进行密码哈希。应用程序的默认哈希驱动由新的 config/hashing.php
配置文件控制。
UUID 方法
Laravel 5.6 引入了两个用于生成 UUID 的新方法:Str::uuid
和 Str::orderedUuid
。orderedUuid
方法将生成一个时间戳优先的 UUID,更容易和高效地被 MySQL 等数据库索引。这些方法中的每一个都返回一个 Ramsey\Uuid\Uuid
对象:
use Illuminate\Support\Str;
return (string) Str::uuid();
return (string) Str::orderedUuid();
Collision
默认的 laravel/laravel
应用程序现在包含一个 dev
Composer 依赖项 Collision 包,由 Nuno Maduro 维护。此包在与 Laravel 应用程序交互时提供美观的错误报告:

Bootstrap 4
所有前端脚手架,例如身份验证样板和示例 Vue 组件,已升级到 Bootstrap 4。默认情况下,分页链接生成也现在默认使用 Bootstrap 4。