php - 如何在 Spatie\DataTransferObject 的 DTO 类中强制转换属性
问题描述
在 laravel 中,我使用 spatie/data-transfer-object 将我的列之一转换为
protected $casts = [
'details' => ProductDetails::class,
];
在我的 ProductDetails DTO 中,我还想转换我的两个日期字段
class ProductDetails extends CastableDataTransferObject
{
use HasDates;
public int $number
#[CastWith(ProductDateCaster::class)]
public int $start_date; //est DD/MM/YY
#[CastWith(ProductDateCaster::class)]
public int $end_date;
}
这是我的施法者
class ProductDateCaster implements Caster{
public function cast(mixed $value): string
{
$productDetails = new ProductDetails();
return $productDetails->parseDate($value)->format('d/m/Y');
}
}
我的做法不对,施法者正在创建一个 DTO 对象,并向被施法者以外的字段提供 null。谁能建议在 DTO 的特定领域使用脚轮的正确方法
解决方案
以自爆的例子为起点'?' 对于 PHP8 来说是 null 安全的,总是使用它。
class UserDto extends DataTransferObject
{
public string $email;
public ?string $password = null;
public ?int $city_id = null;
public ?array $about = ['en'=>'','ar'=>''];
public ?bool $fromAdmin = null;
public function __construct($args)
{
parent::__construct($args);
}
/**
* @throws UnknownProperties
*/
public static function userModel(Request $params): Self
{
return new self([
'email' => $params->input('email'),
'password' => $params->filled('password') ? bcrypt($params->input('password')) : false,
'city_id' => $params?->input('city_id'),
'about' => [
'en' => $params?->input('about')['en'] ?? NULL,
'ar' => $params?->input('about')['ar'] ?? NULL,
],
'fromAdmin' => $params?->input('fromAdmin'),
]);
}
}
推荐阅读
- google-apps-script - 谷歌脚本比较日期
- javascript - Vue Quasar - 异步数据默认为 [object Object] 的 Qselect
- c# - C# 检查中间件中的响应类型
- javascript - 段落隐藏在前面的相对 div 后面,我如何在下面清除它?
- power-automate - Power Automate Desktop - 创建子流或存储函数库
- discord.py - Discord.py,client.get_all_members() 不起作用
- c - C - 对文件中的字符串进行排序,但内存使用量有限
- visual-studio-code - VSCode 有没有好的 Latex 编译错误总结工具?
- amazon-web-services - 使用 Gremlin 在 Neptune 中访问命名图
- mongodb - 检查mongodb中有线老虎的缓存大小