当DB标志打开时,将样式应用于元素

时间:2017-02-09 01:14:33

标签: html css laravel

我的数据库上有几个标志,每个标志代表一个状态 对于每个,我都有一个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    

我真的不想为每个州都写这个。

1 个答案:

答案 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);
}