php - 从访问器返回 HTML 是否可以接受?
问题描述
我正在使用 Laravel 框架。我尽可能使用该模型返回可在整个应用程序中使用的通用属性。
我的应用程序的一部分跟踪网站的响应时间(首字节时间/TTFB)。在我的Website
模型中,我将响应时间“评分”为“好”、“差”和“平均”。所以,我有一个返回这个的访问器。很简单,很好的做法:
/**
* Accessor for TTFB grade (good, bad, average).
*
* @return String
*/
public function getAverageTtfbGradeAttribute()
{
if($this->average_ttfb < 0.5) {
$grade = 'good';
} elseif($this->average_ttfb >= 0.5 && $this->average_ttfb < 1.2) {
$grade = 'average';
} else {
$grade = 'bad';
}
return $grade;
}
在整个应用程序中,我想显示 TTFB/响应时间,但我希望它根据成绩着色。我创建了另一个依赖于第一个访问器的访问器:
/**
* Accessor for TTFB with a colour
*
* @return String
*/
public function getAverageTtfbColoredAttribute()
{
$str = '<span class="';
if($this->averageTtfbGrade == 'good') {
$str.= 'text-success';
} elseif($this->averageTtfbGrade == 'average') {
$str.= 'text-warning';
} else {
$str.= 'text-danger';
}
$str.= '">' . $this->average_ttfb .'s</span>';
return $str;
}
要使用它,我只需要使用$website->averageTtfbColored
. 它完美地工作。
不过,我的问题是这是好做法还是坏做法?我的理解是,无论是在控制器、模型还是应用程序的任何其他部分中,HTML 都不应该成为业务逻辑的一部分。但是,如果我遵循这个逻辑,那么我最终会在视图中使用 if 语句,这些语句将在我的应用程序的许多地方重复 - 它违反了 DRY 原则。
这里的最佳做法是什么?我是不是想多了?
解决方案
这违反了 MVC 模式,因为您的模型现在也是部分视图。我建议您创建一些小的子视图/组件/resources/views/components/averageTtfd.blade
,然后在整个应用程序中使用它们。
推荐阅读
- php - PHP 语言环境 de_DE 正在返回英语语言环境
- javascript - RabbitMQ 和延迟消息
- java - Java中HashMap的内部实现
- ansible - 在 Ansible 中,如何根据键上的正则表达式模式过滤字典?
- android - 找不到我在设备上创建的文件夹
- java - 如何从多个消费者的主题中读取消息?
- asp.net - 使用 ASP.NET Web API 作为 Hangfire 作业存储
- r - 为什么 stCuts 中会出现错误“在 st-cuts.c:415 : Invalid root vertex id for dominator tree, Invalid value”?
- javascript - 数组映射的 JavaScript 内联函数
- linux - 在linux中覆盖环境变量