我已经看到了一些与我相似的问题,常见的答案是使用视图作曲家 . 我有一个HomeController,通过将查询数据传递给关联的视图来显示数据库中的文章,该视图有效see this image link
如您所见,有一个导航栏,由主布局layout.master生成 .
对于导航中的每个 Headers ,我试图通过生成链接的for循环显示该部分的每篇文章 .
我的代码是这样的 .
public function index()
{
$loans_articles = Article::byDepartment('Loans')->get();
$digital_articles = Article::byDepartment('Digital')->get();
$consulting_articles = Article::byDepartment('Consulting')->get();
return view('welcome',
[
'loans_articles' => $loans_articles,
'digital_articles' => $digital_articles,
'consulting_articles' => $consulting_articles,
]);
}
如您所见,我将此数据返回到欢迎刀片 .
在我的导航栏中,我试过了
@if(count($loans_articles) > 0)
@foreach($loans_articles as $ls)
<!--for each loop which grabs the articles with department Loans-->
<li><a href="/article/{{ $ls->id }}">{{ $ls->title }}</a></li>
@endforeach
@endif
但是一旦您离开主页,导航栏就不知道$ loans_article是什么 .
有没有一种干净的方法将这些数据传递到主刀片导航而不向每个子视图发送相同的数据?
2 回答
我倾向于实现这一点的方法是以这种方式为每个视图提供一个变量:
所有控制器都应扩展一个基本控制器,通常位于
app/Http/Controllers/Controller.php
. 在此控制器中,您可以放置一些将由所有扩展控制器使用的代码 .在这个基本控制器中,您可以为所有视图创建一个变量,例如...
所有控制器 must 都会扩展此控制器以使其正常工作 .
如果您的任何控制器都有自己的构造函数,则还必须确保调用
parent::__construct()
以确保运行上述代码 . 如果您的控制器没有自己的构造函数,则可以省略调用parent::__construct()
.这样您就可以在所有视图中使用
$loans_articles
.您必须使用View Composer来实现您要执行的操作:
https://laravel.com/docs/5.2/views