Laravel 8.16 发布

Laravel

上周 Laravel 团队发布了 8.16 版本,包含可以直接到数据库命令行界面的 artisan 命令, 便捷的进度条方法, 和一个新的 Ably 的实现.

该版本包含的许多喜人的新功能, 让我们看下 8.x 分支中的最新更改:

进度条便捷方法

Taylor Otwell 提供了可以在控制台命令中使用的 withProgressBar() 便捷方法 。您可以按照以下步骤从文档创建进度条:

$users = App\Models\User::all();
$bar = $this->output->createProgressBar(count($users));

$bar->start();

foreach ($users as $user) {
    $this->performTask($user);

    $bar->advance();
}

$bar->finish();

使用便捷方法后,代码看起来像这样:

$users = App\Models\User::all();

$this->withProgressBar($users, function ($user, $bar) {
    $this->performTask($user);
});

Call Silently

Taylor Otwell贡献了callSilently()方法,该方法是CallsCommands特性中callSilent的别名。您可能会发现这更清楚:

$this->callSilently('config:cache');

在处理之前释放唯一队列任务锁

Paras Malhotra 贡献了在作业处理之前释放唯一队列任务的功能.对于在队列任务完成和解锁之间可能存在竞争条件的情况,新界面很有用。要了解更多信息,我建议您检查框架的 Pull Request #35255 和 documentation pull request.

Ably Broadcaster

泰勒·奥特威尔(Taylor Otwell)为广播实时,实时更新的用户界面贡献了AblyBroadcaster。开发人员现在可以从Pusher,Redis和Ably中进行选择,以满足实时通信需求。如需复习,请查看Broadcasting文档,以了解如何开始在Laravel项目中进行广播。

支持每个通道的延迟通知

Gergő D. Nagy )贡献了基于每个通道而不是一个整体延迟来延迟通知传递的功能。如果需要针对电子邮件,数据库,SMS等通知不同地延迟同一通知,则定义每个通道的延迟很有用。您现在可以选择使用要延迟的频道关联数组来调用 delay():

$user->notify((new InvoicePaid($invoice))->delay([
    'mail' => now()->addMinutes(5),
    'sms' => now()->addMinutes(10),
]));

请注意,使用数组格式时,未在数组中定义的通道不会有延迟。

允许按多个条件对数组进行排序

johnylemon 为Arr支持类贡献了一个sortByMany方法,默认情况下该道具将按升序对道具进行排序:

$sorted = Arr::sortByMany($unsorted, [
    'name', 'age'
];

$sorted = Arr::sortByMany($unsorted, [
    ['name', false], // will be ordered by `name` descending  
    ['age', true] // then by age ascending, if there are items with same `name` value
];

最后, 这个 PR 的要点是这个方法可以使用闭包进行复杂的排序:

$sorted = Arr::sortByMany($unsorted, [
    // order by childrens count asc
    function($a, $b) {
        return $a->childrens()->count() <=> $b->childrens()->count();
    },
    // then by grandchildrens by descending order if needed
    function($a, $b) {
        return $b->grandchildrens()->count() <=> $a->grandchildrens()->count();
    }
];

加入数据库的 CLI

Paras Malhotra—贡献了许多出色的队列功能—目前又提供了一个新的 artisan 命令,加入数据库的 CLI :

php artisan db mysql

上面的命令是使用数据库凭据连接到MySQL CLI提示符,无需手动的记忆命令或者设置别名命令。 这个命令目前支持 mysqlpgsqlsqlite,和 sqlsrv 数据库。

集合的 splitIn 方法

Andrew Brown 提供了 splitIn 方法, 和 split 类似。 不同之处在于,split使得每个区块与另一区块在数量上的差异不会超过一个。 相反,splitIn将填充所有之前的块,然后将剩余部分分配给最后一个块。这个  pull request 提供了有关为什么要使用splitIn的更多详细信息。

发行说明

你可以在 GitHub 上看到下面的完整的新增功能和更新列表,以及8.15.0 和8.16.0 的区别。以下发行说明直接来自changelog:

v8.16.0

新增

  • 添加了 Illuminate\Console\Concerns\InteractsWithIO::withProgressBar() (4e52a60169fd2b)
  • 添加了 Illuminate\Console\Concerns\CallsCommands::callSilently() 别名 callSilent() (7f3101b0294433)
  • 添加了在处理之前释放唯一作业锁的选项 (#35255b53f13e)
  • 广播系统中新增 Ably 广播 (e0f3f8e6381aa9)
  • 新增了将表名定义为默认变形类型的功能 (#35257)
  • 允许为数据库队列驱动程序覆盖 MySQL 服务器版本 (#35263)
  • 添加了 Illuminate\Foundation\Testing\Wormhole::back() (#35261)
  • 支持为每个频道添加延迟通知 (#35273)
  • 允许对多个条件进行排序 (#3527753eb307)
  • 添加了 Illuminate/Database/Console/DbCommand.php 命令 (#35304b559b3e)
  • 添加了集合方法splitIn (#35295)

修复

  • 修复了具有配置自定义主题的通知的呈现(325a335)
  • 正在修复在PusherBroadcaster@broadcast的 BroadcastException消息(#35290)
  • 修复了DetectsLostConnection字符串(#35323)
  • 修复了SQL Server命令生成(#35317)
  • 修复了在缓存的封闭路线上的路线模型绑定(eb3e262)

修改

  • 在广播路由上禁用CSRF(acb4b77)
  • 轻松设置空缓存驱动程序(#35262)
  • 建议将aws/aws-sdk-php更新到^3.155 (#35267)
  • 确保释放一次ShouldBeUniqueUntilProcessing的任务锁 (#35270)
  • 将BelongsToMany和MorphToMany中的qualifyColumn重命名为qualifiedPivotColumn(#35276)
  • 检查在Illuminate\Database\Eloquent\Relations\BelongsToMany中是否使用了AsPivot trait而不是Pivot Model(#35271)
  • 避免在Model::destroy()中使用空ID进行无操作数据库查询(#35294)
  • 在pg_restore中使用–no-owner和–no-acl(#35309)
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/laravel-8-16-0

译文地址:https://learnku.com/laravel/t/52917

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!