2017-02-09 32 views
0

我在數據庫中有幾個標誌,每個標誌表示一個狀態
對於每個狀態,我有一個圖標,就像這樣:DB標誌打開時將樣式應用到元素

<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

你可以做到這一點通過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); 
} 
相關問題