从不同的控制器输出到相同的视图
Posted
技术标签:
【中文标题】从不同的控制器输出到相同的视图【英文标题】:Output to same view from different controllers 【发布时间】:2019-09-28 21:55:46 【问题描述】:是否可以从多个控制器输出到同一个视图。我有一个名为“仪表板”的视图。我有两个变量:$users
和 $friends
。我想从不同的控制器向这些变量发送数据。我需要将两个控制器添加到同一条路由吗?
观点:
<div class="panel friendlist" id="friendlist">
<div class="panel-heading"><h3 class="panel-title">Result List</h3>
</div>
<div class="panel-body">
<ul class="list-group">
@foreach($friends as $friend)
<li class="list-group-item"><a href=""> $friend->username </a>
</li>
@endforeach
</ul>
</div>
</div>
</section>
<section class="row posts">
<div class="col-md-6 col-md-3-offset">
<header><h3>other posts</h3></header>
@foreach($posts as $post)
<article class="post">
<p> $post->content </p>
<div class="info">Posted by $post->user->username on $post->created_at </div>
后控制器:
public function getDashboard()
$posts = Post::orderBy('created_at','desc')->get();
return view('dashboard',['posts' => $posts]);
朋友控制器:
public function getFriends()
$friends = Auth::user()->friends()->where('status','accepted')->get();
return view('dashboard',['friends' => $friends]);
当前路线:
Route::get('/dashboard',[
'uses' => 'PostController@getDashboard',
'as' => 'dashboard',
'middleware' => 'auth'
]);
【问题讨论】:
如何将多个控制器添加到同一条路由?是的,您可以在任意数量的控制器中使用视图。 【参考方案1】:@Amartya Barua,您可以使用视图编写器将一些变量共享给多个视图https://laravel.com/docs/5.8/views,或者您可以创建BaseService,并编写可重用的getter并将BaseService注入您的控制器,这样您就可以访问所需的getter给你的控制器,如果有任何问题评论我的回答
【讨论】:
【参考方案2】:你能做的很简单
首先创建一个模型,并在此模型中为这两个变量值创建两个函数。
在您想要使用仪表板作为视图的控制器中,将模型添加到您的控制器,然后简单地传递该模型的调用函数并将此函数值传递给视图。
【讨论】:
以上是关于从不同的控制器输出到相同的视图的主要内容,如果未能解决你的问题,请参考以下文章