* * * * *
[TOC]
## 版本控制方案
Laravel 的版本控制方案使用以下约定:`主版本号.次版本号.修订号`。次版本号框架每六个月(二月和八月)发布,而修订号版本可能每周发布一次,而修订号版本**不**包含重大更改。
你从应用程序中或在包中引用 Laravel 框架或其他组件时,应该始终使用版本约束,例如 `5.5.*`,因为 Laravel 的次要版本包含重大更改。但是,我们会努力确保你可以在一天或更短时间内完成更新。
主版本之间的发布往往需要很多年,每次发布代表框架架构和底层结构发生了根本的改变。而目前并没有准备开发主版本号的计划。
## 支持策略
对于 LTS 版本,例如 Laravel 5.1,提供两年的错误修复和三年的安全修复。这些版本提供最长时间的支持和维护。对于一般版本,则只是提供六个月的错误修复和为期一年的安全修复。
## Laravel 5.6
Laravel 5.6 继续在 Laravel 5.5 的基础上进行持续改进,改进有添加了一个改良的日志系统,单机任务调度系统,对模型序列化进行改进,动态的速率限制,广播频道类添加,可生成 API 资源控制器,Eloquent 日期格式改进,Blade 组件别名,Argon2 密码哈希支持,加入 Collision 包,以及更多。除此之外全部前端脚手架已经升级为 Bootstrap 4。
所有 Laravel 使用的 Symfony 组件已经升级到 Symfony `~4.0` release 系列。
此次发布 Laravel 5.6 的同时也发布了 [Spark 6.0](https://spark.laravel.com/),这是 Laravel Spark 的一次重大升级,Spark 6.0 为 Stripe 和 Braintree 引入了按座定价功能,以及本地化、Bootstrap 4、增强 UI 和 Stripe Elements 支持。
> {tip} 这个文档总结了那些对框架来说最显著和值得注意的改进;更加详尽的改进可以查阅 [on GitHub](https://github.com/laravel/framework/blob/5.6/CHANGELOG-5.6.md).
### Logging 改进
Laravel 5.6 对日志系统做出了巨大的改进,所有日志的配置都放置在一个新的 `config/logging.php` 配置文件中,你可以轻松的构建日志「栈」然后发送日志消息到多个处理器,例如,你可以发送所有的 `debug` 级别的日志消息到系统日志,同时将 `error` 级别的日志消息发送到 Slack ,以便让团队成员更快速的对系统的错误做出反应:
~~~
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['syslog', 'slack'],
],
],
~~~
此外,使用日志系统的新「tap」功能,现在能更容易的自定义已存在的日志频道,更多详情可以查看 [完整的日志系统文档](https://www.kancloud.cn/tonyyu/laravel_5_6/786183).
### 单机任务调度
> {note} 要使用这个新特性,必须使用`memcached` 或 `redis` 缓存驱动作为你应用程序的默认缓存驱动。另外,所有的服务器必须与同一个中心缓存服务器通信。
如果你的应用程序运行在多个服务器上,现在你可以限定只在一台机器上运行计划任务。 例如,假设你有一个每周五晚上生成新报告的计划任务。如果计划任务是运行在三个服务器上,这个计划任务就会运行在三个服务器上并生成同样的报告三次,这样非常糟糕!
为了让计划任务只运行在一个服务器上,可以在定义计划任务时使用 `onOneServer` 方法。 第一个服务器获得任务将会给任务添加一个原子锁,阻止其他的服务器在相同的计划周期运行同样的计划任务:
~~~
$schedule->command('report:generate')
->fridays()
->at('17:00')
->onOneServer();
~~~
### 动态频率限制
在之前的 Laravel 版本的路由群组中指定 [频率限制](https://www.kancloud.cn/tonyyu/laravel_5_6/786088#_358) 后,必须要硬编码最大请求次数:
~~~
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 生成控制器时,你会希望生成的控制器类里不包含 `create` 和 `edit` 方法,因为他们在资源控制器的定义里,是返回 HTML 内容的。在 Laravel 新版本里,你只需要在执行 `make:controller` 时指定参数 `--api` 即可移除这两个方法:
~~~
php artisan make:controller API/PhotoController --api
~~~
### Model 模型序列化增强
在之前的版本中,当在队列中使用模型数据时,模型关联的数据是不会被直接加载的。在 Laravel 5.6 里,只要你请求队列时提前加载了模型关联数据,在队列执行时,这些关联数据会被自动加载。
### Eloquent 日期格式指定
现在你可以为 Eloquent 的日期字段指定专属的 **日期格式** 了。字段指定日期格式以后,序列号 / JSON 都会返回格式化后的数据:
~~~
protected $casts = [
'birthday' => 'date:Y-m-d',
'joined_at' => 'datetime:Y-m-d H:00',
];
~~~
### Blade 组件别名
如果你的 Blade 组件存储在子目录中,现在可以给它们起一个别名以方便访问。例如,想象存储在 `resources/views/components/alert.blade.php` 目录下的Blade 组件, 你可以使用 `component` 方法将`components.alert` 组件别名为 `alert`:
~~~
Blade::component('components.alert', 'alert');
~~~
一旦组件被别名,你可以使用一个指令来渲染它:
~~~
@alert('alert', ['type' => 'danger'])
You are not allowed to access this resource!
@endalert
~~~
如果没有附加插槽,您可以省略组件参数:
~~~
@alert
You are not allowed to access this resource!
@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` 应用包含了由 Nuno Maduro 维护的 [Collision](https://github.com/nunomaduro/collision) 的 `dev` Composer 第三方依赖包,当我们在命令行中与 Laravel 应用进行交互时,它会提供美观的错误报告信息:
[](https://raw.githubusercontent.com/nunomaduro/collision/stable/docs/example.png)
[![example.png](https://raw.githubusercontent.com/nunomaduro/collision/stable/docs/example.png)](https://raw.githubusercontent.com/nunomaduro/collision/stable/docs/example.png)
### Bootstrap 4
所有的前端脚手架,例如身份验证样板文件和示例 Vue 组件都已经升级到了
[Bootstrap 4](https://blog.getbootstrap.com/2018/01/18/bootstrap-4/)。默认情况下,分页链接生成的样式也默认采用了 Bootstrap 4。
- 前言
- 翻译说明
- 发行说明
- 升级指南
- 贡献导引
- 入门指南
- 安装
- 配置信息
- 文件夹结构
- Homestead
- Valet
- 部署
- 核心架构
- 请求周期
- 服务容器
- 服务提供者
- Facades
- Contracts
- 基础功能
- 路由
- 中间件
- CSRF 保护
- 控制器
- 请求
- 响应
- 视图
- URL
- Session
- 表单验证
- 错误
- 日志
- 前端开发
- Blade 模板
- 本地化
- 前端指南
- 编辑资源 Mix
- 安全相关
- 用户认证
- Passport OAuth 认证
- 用户授权
- 加密解密
- 哈希
- 重置密码
- 综合话题
- Artisan 命令行
- 广播系统
- 缓存系统
- 集合
- 事件系统
- 文件存储
- 辅助函数
- 邮件发送
- 消息通知
- 扩展包开发
- 队列
- 任务调度
- 数据库
- 快速入门
- 查询构造器
- 分页
- 数据库迁移
- 数据填充
- Redis
- Eloquent ORM
- 快速入门
- 模型关联
- Eloquent 集合
- 修改器
- API 资源
- 序列化
- 测试相关
- 快速入门
- HTTP 测试
- 浏览器测试 Dusk
- 数据库测试
- 测试模拟器
- 官方扩展包
- Cashier 交易工具包
- Envoy 部署工具
- Horizon
- Scout 全文搜索
- Socialite 社会化登录