我正在使用 Laravel Livewire v2,我需要将表单日期输入绑定(bind)到后端 Livewire 组件中的模型 Carbon 属性,但到期日期格式似乎是不可能的。
更准确地说:
2020-02-02
)->format('Y-m-d')
Carbon 对象的格式,因此发送一个序列化的日期对象 2012-12-25T20:30:00.000000+04:00 MSK
我还发现,在 Livewire v1 中,可以使用键值数组或自定义转换方法转换属性( link ),但在 v2 中已删除( link );有一个示例
hydrate
/dehydrate
实现相同效果的方法,但该示例涵盖了组件属性的情况,而不是我的情况下的嵌套属性。有没有办法在将数据发送回客户端时转换模型日期 Prop 或添加格式?
最佳答案
更新 (2020-10-15)
从 Livewire v2.3 开始,模型转换现在可以在直接绑定(bind)到模型属性时工作(又名 wire:model
)。
您需要做的就是转到您的模型并提供您的日期类型转换,让我们采取Post
以模型为例:
class Post extends Model
{
protected $casts = [
'published_at' => 'date:Y-m-d'
];
}
这将使 Livewire 知道您的 published_at
字段应以 Y-m-d
格式序列化在客户端使用它,并将其转换回 Carbon
( DateTime
) 实例更新。现在,您可以安全地将它附加到您的
<input>
field :<input type="date" wire:model="published_at" />
旧答案目前,有一个待定的 PR 旨在为 Livewire v2 解决这个问题。如果你去支持它会很有帮助:)
https://github.com/livewire/livewire/pull/1665
关于Laravel Livewire 绑定(bind)模型 Carbon 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64064239/