gpt4 book ai didi

laravel - 在 Laravel 的 Blade 模板中显示格式化属性

转载 作者:行者123 更新时间:2023-12-02 15:33:41 24 4
gpt4 key购买 nike

比方说,我有一些带有 updated_at 属性的 Model 。我想在这样的模板中显示它

{{ $model->updated_at }}

这可以在很多地方使用,所以我不这样做

{{ $model->updated_at->format('d/m/Y H:i:s') }}

但是相反

public function getUpdatedAtAttribute($value)
{
return $value->format('d/m/Y H:i:s');
}

但是这个解决方案有一个大问题,我不能再在 Controller 中使用 $model->updated_at ,因为它返回字符串,而不是 Carbon 实例。

两种可能的解决方案

1.

public function getUpdatedAtFormatterAttribute($value)
{
return $this->updated_at->format('d/m/Y H:i:s');
}

在模板中

{{ $model->updated_at_formatted }}

2.

使用类似 this 的包

class ModelPresenter extends Presenter {

public function updated_at()
{
return $this->updated_at->format('d/m/Y H:i:s');
}
}

还有

{{ $model->present()->updated_at }}

从架构的角度来看,我认为第二个版本更干净,但是有一些经过验证的解决方案吗?这不仅仅涉及 Laravel,还涉及任何流行的 PHP 框架。

最佳答案

问题中描述的两种方法实际上是在 Laravel 模型上添加 DRY 日期格式的标准且广泛接受的方法:

  • 向模型中添加一个或多个特定日期格式的访问器
  • 使用一个演示器将模型与显示逻辑包装在一起

这两种方法都将格式化逻辑合并在一个位置,以便我们可以在以后需要时更新格式,而无需更改输出日期的每一行。两者还避免覆盖源属性,以便在需要时可以使用该功能。

选择哪个取决于应用程序的大小和要求。具有小型团队的小型应用程序当然可以证明第一种方法的合理性,该方法避免通过添加表示层而引入复杂性。第二种方法可能适合可以从抽象和关注点分离中受益的大型团队。

在某些应用程序中,我喜欢创建一个可以添加到任何模型的特征,该特征可以使用模型上声明的日期和日期格式启用自动日期格式化属性:

class User extends Model 
{
use FormatsDates;

protected $dates = [ 'last_login_at' ];
...
}

$user->formatted_last_login_at; // mm/dd/yyyy

因为这个问题的范围内不包含这样的特征,所以我将把实现作为练习留给读者,但如果需要,我很乐意提供帮助。

关于laravel - 在 Laravel 的 Blade 模板中显示格式化属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46513328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com