Laravel全局循环

时间:2015-05-20 16:10:59

标签: php loops laravel global

我试图将全局(警报)全局循环到我的视图中。

所以我想在我看来做这样的事情:

@foreach($alert as $alert)
<div class="alert alert-{{ $alert->type }}" role="alert">{{ $alert->message }}</div>
@endforeach

但是,当我在BaseController

中执行此操作时
public function __construct() { 

        $get_alerts = Alert::orderBy('id', 'DESC')->whereNull('deleted_at')->get();
        foreach ($get_alerts as $alert) {

            //make an array object of the alerts
            $alert = array();
        }

        return View::share('alert', $alert);
    }

{{ dd($alert) }}然后我得到了这个输出:array(0) { } 什么不是我想要的......

如何以干净和良好的方式解决这个问题?

最诚挚的问候,

罗宾

1 个答案:

答案 0 :(得分:3)

您的代码存在一些问题。这条线是最重要的:

$alert = array();

你在这里说的是&#34;对于$get_alerts中的每个结果,将$alert设置为空数组&#34;。这就是为什么你得到输出array(0) { } - 它是一个空数组。

另一个更大的问题是这一行:

@foreach($alert as $alert)

你应该在这里使用两个不同的变量名,因为循环的每次迭代都会为$alert赋予一些东西,如果它们被命名为相同,它将覆盖第一个数组。典型而简单的解决方法就是:

@foreach($alerts as $alert)

现在他们不会互相覆盖。

你也有这部分方法链接:->whereNull('deleted_at')。如果您使用软删除,实际上您不必这样做,因为Laravel会自动为您删除(&#34;删除&#34;)项目。 (但如果你不使用软删除,你可以忽略这一段。)

Blade&#39; @foreach实际上是开箱即用的Eloquent系列。所以你的代码可以清理很多,比如:

public function __construct() { 
    $alerts = Alert::orderBy('id', 'DESC')->whereNull('deleted_at')->get();
    return View::share('alerts', $alerts);
}

[...]

@foreach($alerts as $alert)
<div class="alert alert-{{ $alert->type }}" role="alert">{{ $alert->message }}</div>
@endforeach