Laravel 8.77 发布:新的模型修改器、$request->date() 方法、独立的 redis 前缀、Storage::temporaryUrl()
Laravel 团队发布了 8.77 版本 ,其中改进了属性转换 / 访问器,请求 date () 方法以 DateTime 实例访问数据,MAC 地址验证,在存储磁盘上定义自定义临时 URL 的能力,以及 v8.x 中的最新更改分支。
属性转换 / 访问器改进#
Taylor Otwell 提供了一种定义属性访问器和修改器的新方法:
// 之前, 两个方法的方式
public function setTitleAttribute($value)
{
$this->attributes['title'] = strtolower($value);
}
// 新的方式
protected function title(): Attribute
{
return new Attribute(
set: fn ($value) => strtolower($value),
);
}
这里有一个例子同时有 get 和 set 的实现:
/**
* 获取用户的标题
*/
protected function title(): Attribute
{
return new Attribute(
get: fn ($value) => strtoupper($value),
set: fn ($value) => strtolower($value),
);
}
要了解更多信息,请查看关于此功能的 pull request 以及关于此功能的描述和讨论。
已将日期时间解析添加到请求实例#
@Italo 为请求实例提供了一个 date()
方法,使得从请求数据获取日期实例变得非常方便:
// 以前
if ($date = $request->input('when')) {
$date = Carbon::parse($datetime);
}
// 之后
$date = $request->date('when');
每个连接的前缀#
Ben Tidy 有助于在 Predis 的每个连接基础上使用前缀。以下是 Redis 配置的 pull 请求的示例:
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DB', 0),
'prefix' => env('REDIS_PREFIX', 'prefix:'),
],
'cache' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_CACHE_DB', 1),
'prefix' => env('REDIS_PREFIX', 'prefix2:'),
],
],
MAC 地址验证规则#
Bilal Al-Massry 贡献了 mac_address
验证规则, 用于验证 MAC 地址:
$trans = $this->getIlluminateArrayTranslator();
$v = new Validator($trans, ['mac' => 'foo'], ['mac' => 'mac_address']);
$this->assertFalse($v->passes());
$trans = $this->getIlluminateArrayTranslator();
$v = new Validator($trans, ['mac' => '01-23-45-67-89-ab'], ['mac' => 'mac_address']);
$this->assertTrue($v->passes());
$trans = $this->getIlluminateArrayTranslator();
$v = new Validator($trans, ['mac' => '01-23-45-67-89-AB'], ['mac' => 'mac_address']);
$this->assertTrue($v->passes());
定义存储的临时 URL 方法#
Ash Allen 贡献了为 Storage 门面定义自定义临时 URL 逻辑的能力。 以下是拉取请求的几个示例:
Storage::disk('local')
->buildTemporaryUrlUsing(function ($path, $expiration, $options) {
return 'using local';
});
// $url is: 'using local'
$url = Storage::temporaryUrl('file.jpg', now()->addMinutes(5));
发行说明#
您可以在 github 上看到以下新功能和更新的完整列表以及 8.76.0 and 8.77.0 之间的差异。 以下发行说明直接来自 变更日志:
v8.77.0#
新增#
- 属性转换 / 访问器改进 (#40022)
- 新增
Illuminate/View/Factory::renderUnless()
(#40077) - 向 Request 实例添加日期时间解析 (#39945)
- 使每个连接都可以在 Predis 上使用前缀 (#40083)
- 添加了验证 MAC 地址的规则 (#40098)
- 添加了为存储定义临时 URL 的功能 (#40100)
已修复#
- 修复 Redis 驱动程序中通过引用 key 从缓存中删除 values 时可能出现的内存不足错误 (#40039)
- 新增
Illuminate/Filesystem/FilesystemManager::setApplication()
(#40058) - 修复在 doesntContain () 方法的参数传递 (739d847)
- 翻译 Enum 规则消息 (#40089)
- 修复关于日期的验证 (#40088)
- 在 PruneCommand.php 中不允许 models 和 except 一起使用 (f62fe66)
已更改#
- 通过 Eloquent\Query::explain 方法对 Query\Builder:explain 使用特定于数据库解释命令的功能 (#40075)
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
推荐文章: