从不同的控制器输出到相同的视图

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】:

你能做的很简单

    首先创建一个模型,并在此模型中为这两个变量值创建两个函数。

    在您想要使用仪表板作为视图的控制器中,将模型添加到您的控制器,然后简单地传递该模型的调用函数并将此函数值传递给视图。

【讨论】:

以上是关于从不同的控制器输出到相同的视图的主要内容,如果未能解决你的问题,请参考以下文章

Rails - 相同的模型/控制器,但不同的视图

如何从不同的集合视图单元到不同的视图控制器

将信息发送到我在导航控制器中返回的视图

重新加载相同的视图控制器,但信息不同

如何将tabpanel的键从视图传递到控制器asp mvc

调用相同的视图控制器但需要不同的操作