发行说明

未匹配的标注
本文档最新版为 8.5,旧版本可能放弃维护,推荐阅读最新版!

发行说明

版本控制方案

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,这是 Laravel Spark 的一次重大升级,Spark 6.0 为 Stripe 和 Braintree 引入了按座定价功能,以及本地化、Bootstrap 4、增强 UI 和 Stripe Elements 支持。

{tip} 这个文档总结了那些对框架来说最显著和值得注意的改进;更加详尽的改进可以查阅 on GitHub.

Logging 改进

Laravel 5.6 对日志系统做出了巨大的改进,所有日志的配置都放置在一个新的 config/logging.php 配置文件中,你可以轻松的构建日志「栈」然后发送日志消息到多个处理器,例如,你可以发送所有的 debug 级别的日志消息到系统日志,同时将 error 级别的日志消息发送到 Slack ,以便让团队成员更快速的对系统的错误做出反应:

'channels' => [
    'stack' => [
        'driver' => 'stack',
        'channels' => ['syslog', 'slack'],
    ],
],

此外,使用日志系统的新「tap」功能,现在能更容易的自定义已存在的日志频道,更多详情可以查看 完整的日志系统文档.

单机任务调度

{note} 要使用这个新特性,必须使用memcachedredis 缓存驱动作为你应用程序的默认缓存驱动。另外,所有的服务器必须与同一个中心缓存服务器通信。

如果你的应用程序运行在多个服务器上,现在你可以限定只在一台机器上运行计划任务。 例如,假设你有一个每周五晚上生成新报告的计划任务。如果计划任务是运行在三个服务器上,这个计划任务就会运行在三个服务器上并生成同样的报告三次,这样非常糟糕!

为了让计划任务只运行在一个服务器上,可以在定义计划任务时使用 onOneServer 方法。 第一个服务器获得任务将会给任务添加一个原子锁,阻止其他的服务器在相同的计划周期运行同样的计划任务:

$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 生成控制器时,你会希望生成的控制器类里不包含 createedit 方法,因为他们在资源控制器的定义里,是返回 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::uuidStr::orderedUuidorderedUuid 方法将生成一个时间戳的第一个 UUID,它可以通过 MySQL 等数据库更容易和有效地索引。 每个方法都会返回一个 Ramsey\Uuid\Uuid 对象 :

use Illuminate\Support\Str;

return (string) Str::uuid();

return (string) Str::orderedUuid();

Collision

现在,默认的 laravel/laravel 应用包含了由 Nuno Maduro 维护的 Collisiondev Composer 第三方依赖包,当我们在命令行中与 Laravel 应用进行交互时,它会提供美观的错误报告信息:

example.png

Bootstrap 4

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

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

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
上一篇 下一篇
Summer
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
贡献者:7
讨论数量: 1
发起讨论 只看当前版本


北冥
翻译 5.8 文档时 URL 强制替换出错
0 个点赞 | 1 个回复 | 问答 | 课程版本 5.8