2015-10-05 104 views
1

我是Laravel/MVC的新手,所以很抱歉如果這是一個愚蠢的問題。我正在遷移一個傳統的程序性應用程序,並試圖將「標題,城市,州,國家」的單獨數據庫行(通過Eloquent模型提取)作爲逗號分隔值進行回顯。Laravel Blade模板條件格式化

我目前使用的刀片模板看起來像這樣,它功能強大但很可怕。

@foreach ($projects as $projects) 
{{ $projects->title}}{{ $projects->city? ', '.$projects->city : ""}}{{ $projects->state? ', '.$projects->state : "" }}{{ $projects->country? ', '.$projects->country : "" }} 
@endforeach 

有沒有更好的方法來做到這一點?傳統的程序代碼將它推到一個數組並像下面那樣使它崩潰,但是如果我做了一個數組push/implode,我不太確定它是否屬於Eloquent模型或控制器。

$tempArray = array(); 
if($row["city"]) array_push($tempArray, convert_text($row["city"])); 
if($row["state"]) array_push($tempArray, convert_text($row["state"])); 
if($row["country"]) array_push($tempArray, convert_text($row["country"])); 
echo implode(", ", $tempArray); 
echo (count($tempArray) > 0)?", ":""; 

回答

0

嗯..這應該工作:

@foreach ($projects as $project) 
    {{ implode(', ', array_filter([$project->city, $project->state, $project->country])) }} 
@endforeach 

更新: $project->attributes是受保護的,所以我調整上面$project->getAttributes()代碼。

更新2:我錯過排除具有一個空字符串的屬性的點,所以我添加array_filter()上述代碼,以過濾掉具有「falsy」值(那些如一個空字符串,或null)。

更新3:意識到,要在一個特定的順序的屬性..而且也意識到代碼可能是簡單了很多,所以去除array_only()$project->getAttributes()

+0

即將對空串問題發表評論,但我看到您已更新。非常感謝你,像魅力一樣工作,比我提出的所有解決方案都更加優雅。謝謝! – nephenee245

+0

不客氣!請注意,我只是進行了另一次更新,這也爲您提供了所需順序的屬性,並且代碼更簡單。 –