2015-10-05 138 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

不客气!请注意,我只是进行了另一次更新,这也为您提供了所需顺序的属性,并且代码更简单。 –