Laravel9.18版本发布
Laravel 团队发布了 9.18,其中包含令人惊叹的功能和生活质量改进。
让我们看一下 Laravel 9 中现在可用的突出功能的高级细节!
>Laravel 9.18.0 今天发布了。 自然地,它有一些我认为你会挖掘的 *fire* 功能。 让我们跳进去。
首先,@timacdonald87 引入了一种新方法,如果您在请求期间查询数据库所花费的累积时间超过阈值,则会调用闭包 pic.twitter.com/TBPA4P6Rx3
— Taylor Otwell (@taylorotwell) 2022 年 6 月 21 日
改进邮件和通知的文件附件
Tim MacDonald 贡献了可附加对象,您可以使用这些对象来实现带有模型的附件:
namespace App\Models;
use Illuminate\Contracts\Mail\Attachable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Mail\Attachment;
class Photo extends Model implements Attachable
{
/**
* Get the attachable representation of the model.
*
* @return \Illuminate\Mail\Attachment
*/
public function toMailAttachment()
{
return Attachment::fromPath('/path/to/file');
}
}
构建电子邮件时,您可以通过 attach() 方法传递模型的实例:
public function build()
{
return $this->view('photos.resized')
->attach($this->photo);
}
有关此有益功能的完整详细信息,请参阅新的可附加对象文档!
https://laravel.com/docs/9.x/mail#attachable-objects
可调用的验证类
Tim MacDonald 贡献了可调用的验证类:
此 PR 旨在引入一个新的基于类的验证实现,通过引入可调用验证规则,将基于闭包的规则的简洁性与基于类的规则的可共享、可扩展和可链接的特性相结合。
这是来自 Pull Request #42689 的示例实现:
class InvokableQuantity implements InvokableRule
{
public function __invoke($attribute, $value, $fail)
{
if (! is_array($value)) {
return $fail('validation.quantity.must_be_an_object')->translate();
}
if (! array_key_exists('magnitude', $value)) {
$fail('validation.quantity.missing_magnitude')->translate();
}
if (! array_key_exists('units', $value)) {
$fail('validation.quantity.missing_units')->translate();
}
}
}
Predis 2.0
Dries Vints 为 Predis 2.0 提供了支持。 Predis 2.0.0 是一个维护版本,所以不会有任何问题。
通过嵌套数组定义嵌套的“with”关系
Tim MacDonald 提供了一种通过嵌套数组定义嵌套的急切加载关系的方法:
// Using dot notation
$books = Book::with('author.contacts')->get();
// Nested array
$books = Book::with([
'author' => [
'contacts',
'publisher',
],
])->get();
将主机方法添加到 Illuminate Request 对象
Pull Request #42797 在 Illuminate Request 实例上提供了三种方便的方法来访问底层 Symphony 方法:
$request->host(); // getHost()
$request->httpHost(); // getHttpHost()
$request->schemeAndHttpHost(); // getSchemeAndHttpHost()
可调用的验证规则可以将消息推送到嵌套属性
Tim MacDonald 贡献了可调用验证规则将错误推送到嵌套和其他属性的能力:
class UserRule implements InvokableRule
{
public function __invoke($attribute, $value, $fail)
{
if (! is_array($attribute) || array_is_list($attribute)) {
return $fail('Must be an object.'); // apply to $attribute
}
if (! array_key_exists('name', $attribute)) {
return $fail("{$attribute}.name", 'Is required.'); // apply to nested attribute
}
/* ... */
}
}
鉴于上述实现,这是一个使用示例:
Validator::make(
[
'user_1' => ['xxxx'],
'user_2' => ['age' => 23],
],
[
'user_1' => [new UserRule()],
'user_2' => [new UserRule()],
]
);
// errors...
[
'user_1' => ['Must be an object.'],
'user_2.name' => ['Is required.'],
]
引入 fake() 助手
Tim MacDonald 贡献了一个全局 fake() 辅助函数,允许您轻松访问单例 faker 实例。
在进行原型设计、测试和生成工厂和种子数据时,使用此帮助程序很有帮助:
@for($i = 0; $i < 10; $i++)
<dl>
<dt>Name</dt>
<dd>{{ fake()->name() }}</dd>
<dt>Phone</dt>
<dd>{{ fake()->phoneNumber() }}</dd>
</dl>
@endfor
这是特定于语言环境的伪造者使用的示例:
fake()->name() // config('app.faker_locale') ?? 'en_US'
fake('en_AU')->name() // en_AU
累计查询时长限制回调
Tim MacDonald 在累积查询限制持续时间后贡献了一个回调处理程序:
DB::handleExceedingCumulativeQueryDuration(Interval::seconds(5), function (Connection $connection) {
Log::warning("Database queries exceeded 5 seconds on {$connection->getName()}");
});
要了解有关此功能的更多信息,请查看官方文档以了解累积查询时间。
https://laravel.com/docs/9.x/database#monitoring-cumulative-query-time
此外,请查看 Pull Request #42744 以了解有关此功能的实施细节和讨论。
发行说明
您可以在下面查看新功能和更新的完整列表以及 GitHub 上 9.17.0 和 9.18.0 之间的差异。
以下发行说明直接来自变更日志:
https://github.com/laravel/framework/compare/v9.17.0...v9.18.0
https://github.com/laravel/framework/blob/bb91c958532eb7c135d61d52c6c52f77c2ae7f9c/CHANGELOG.md#v9180---2022-06-21
v9.18.0
添加
改进邮件和通知的文件附件 (#42563)
引入 Invokable 验证类 (#42689)
Predis v2.0 (#42577)
添加了 Illuminate/View/Compilers/Concerns/CompilesConditionals::compileReadonly() (#42717)
在游标分页中应用来自联合查询构建器的位置 (#42651)
添加了将“with”关系定义为嵌套数组的功能 (#42690)
添加了在广播事件中设置退避的功能 (#42737)
在请求中添加了 host()、httpHost()、schemeAndHttpHost() (#42797)
允许可调用规则将消息推送到嵌套(或其他)属性 (#42801)
将 compilePushIf 和 compileEndpushIf 函数添加到 View 编译器 (#42762)
添加:允许在测试期间删除令牌 (#42841)
在 Illuminate/Console/GeneratorCommand 中为 reservedNames 数组添加了预定义常量 (#42832)
围绕单个枚举处理集合创建 (#42839)
在 whereNotMorphedT (#42878) 中允许可以为空的变形
根据语言环境,引入 fake() 助手来解决 faker 单例 (#42844)
允许处理每个 DB 连接的累积查询持续时间限制 (#42744)
添加可调用选项以制定规则命令 (#42742)
修复
修复 route:list 命令中的弃用错误 (#42704)
修复了没有 routeResolver 的请求 offsetExists (#42754)
修复:松散比较导致值不被保存(#42793)
修复:修复数据库会话驱动程序不断重置 CSRF 令牌 (#42782)
已修复:Arr::map - 使用内置函数修复 map-by-reference (#42815)
固定联赛/飞行系统建议 (#42872)
改变
在 TestResponse 中启动会话以允许从 JSON 编组错误包 (#42710)
重命名 Illuminate/Broadcasting/BroadcastManager (753e9fd)
中的方法
避免在 Illuminate/Filesystem/FilesystemAdapter::mimeType() 中抛出无效的 mime-type (#42761)
不要解析 Illuminate/Filesystem/FilesystemAdapter 中已设置的标头 (#42760)
标准化可调用规则转换功能 (#42873)
使用箭头设置属性时清除强制转换缓存 (#42852)
转:
https://laravel-news.com/laravel-9-18-0
相关文章