企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
* * * * * [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。