Laravel 5 如何修改默认的日期访问器?
Laravel 5 how to modify default Date accessors?
我有这样的代码:
public function getUpdatedAtAttribute($value) {
setlocale(LC_TIME, config('app.locale'));
return Carbon::parse($value)->formatLocalized(__('DateFormat'));
}
我想 运行 为 $dates
数组中指定的每个字段使用此访问器,而不是为每个模型中的每个日期字段手动指定它,就像默认 Carbon
实例转换一样.我怎么能这样做?是否有更好的方法为 Carbon
?
指定默认的依赖于语言环境的日期格式
我认为您可以使用模型的 $dateFormat 变量在所有模型字段上应用通用日期格式:
class Flight extends Model
{
/**
* The storage format of the model's date columns.
*
* @var string
*/
protected $dateFormat = 'U';
}
更多信息:https://laravel.com/docs/5.4/eloquent-mutators#date-mutators
找到了一个优雅而简单的解决方案:LocalizedCarbon 包。它的工作原理很简单:
use \Laravelrus\LocalizedCarbon\Traits\LocalizedEloquentTrait;
UPD: 似乎这个包实际上只翻译了 DateDiff,但无论如何我可以看到它是如何工作的并在我的模型中使用该逻辑。
UPD2: 我深入挖掘并发现了重载的 formatLocalized
方法,它允许使用 non-standard "%f" 参数, 表示当前应用程序语言环境中的月份名称。所以我最终将 one-liner 日期格式设置为我的 View
而不是 Model
,后者更正确。
我有这样的代码:
public function getUpdatedAtAttribute($value) {
setlocale(LC_TIME, config('app.locale'));
return Carbon::parse($value)->formatLocalized(__('DateFormat'));
}
我想 运行 为 $dates
数组中指定的每个字段使用此访问器,而不是为每个模型中的每个日期字段手动指定它,就像默认 Carbon
实例转换一样.我怎么能这样做?是否有更好的方法为 Carbon
?
我认为您可以使用模型的 $dateFormat 变量在所有模型字段上应用通用日期格式:
class Flight extends Model
{
/**
* The storage format of the model's date columns.
*
* @var string
*/
protected $dateFormat = 'U';
}
更多信息:https://laravel.com/docs/5.4/eloquent-mutators#date-mutators
找到了一个优雅而简单的解决方案:LocalizedCarbon 包。它的工作原理很简单:
use \Laravelrus\LocalizedCarbon\Traits\LocalizedEloquentTrait;
UPD: 似乎这个包实际上只翻译了 DateDiff,但无论如何我可以看到它是如何工作的并在我的模型中使用该逻辑。
UPD2: 我深入挖掘并发现了重载的 formatLocalized
方法,它允许使用 non-standard "%f" 参数, 表示当前应用程序语言环境中的月份名称。所以我最终将 one-liner 日期格式设置为我的 View
而不是 Model
,后者更正确。