我的数据库上有几个标志,每个标志代表一个状态 对于每个州,我都有一个Icon,如下所示:
<div class="myClass">
<i class="icon-flag1"></i>
<i class="icon-flag2"></i>
<i class="icon-flag3"></i>
</div>
每当标志为"on"
时,我想通过更改元素颜色,应用CSS来引起用户的注意。
我想知道比这更好/更清洁的方法:
@foreach($collection as $key => $obj)
@if( $obj->flag1 )
<i class="flag activate"></i>
@else
<i class="flag"></i>
@endif
@endforeach
我真的不想为每个州都写这个。
答案 0 :(得分:1)
您可以通过Defining An Accessor
实现这一目标将以下代码添加到您的模型中,如
public function getFlag1Attribute($value) {
return ($value) ? '<i class="flag active"></i>' : '<i class="flag"></i>';
}
然后,在渲染时只需执行
@foreach($collection as $key => $obj)
{{ $obj->flag1 }}
@endforeach
如果您想要原始值,可以通过
进行检索$obj->getOriginal()['flag1']
如果您想通过不为每个标志编写getAttribute函数来减少代码,请删除getFlag1At
public function __get($name)
{
if (in_array($name, ['flag1', 'flag2', 'flag3'])) {
return ($this->getAttribute($name)) ? '<i class="flag active"></i>' : '<i class="flag"></i>';
}
return $this->getAttribute($name);
}