传递参数以便为两个视图使用相同的数据

时间:2018-02-22 08:07:06

标签: php laravel

我有这种控制器方法:

public function index() {

        if(Auth::user()){

            $tests = $this->getAllTests();

            $tests = (new TestDetailsController)->getTestDetails($tests);

            return view('website.home')->with(['tests' => $tests]);
    }else{
        return view('website.auth.login');
    }   
}

这就是路线:

Route::get('/home', 'HomeController@index');

我在视图home.blade.php上显示这个很好,但我需要这条路线的相同数据以某种方式显示在两个视图上。
例如在home.blade.php和另一个视图中。
这怎么可能?我应该传递一个参数吗?
你能帮助我吗?我是新手编码..谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用视图编辑器并将其附加到这两个视图。

来自the docs

  

您可以通过将一组视图作为第一个参数传递给composer方法,一次将视图编辑器附加到多个视图:

View::composer(
    ['home', 'another_view'],
    'App\Http\ViewComposers\MyViewComposer'
);

我也可以在我的回购中展示use a service class。在这种情况下,您可以在两种控制器方法中执行类似的操作:

return view('website.home', ['tests' => $this->myService->getTests()]);

答案 1 :(得分:0)

您可以使用以下两个URI访问您的操作:

  1. /home
  2. /home?view2=yes
  3. 因此,您的操作返回视图应如下所示:

    ....
    $tests = (new TestDetailsController)->getTestDetails($tests);
    
    if (is_null(request('view2',null))){
           return view('website.home')->with(['tests' => $tests]);
    }
    else{
         return view('website.another-view')->with(['tests' => $tests]);
    }
    ....
    

    此外,通过这种方式,您可以渲染所需的视图,而不仅仅是两个:

    ....
        $tests = (new TestDetailsController)->getTestDetails($tests);
        $viewsList = ['webmite.view1','posts.listings','users.found'];
        if (!is_null(request('view2',null)) && isset($viewsList[request('view2')])){
               return view($viewsList[request('view2')])->with(['tests' => $tests]);
        }
        else{
    
    return view('website.home')->with(['tests' => $tests]);
        }
        ....
    

    但是,这样view2参数应该是一个整数,等于$viewsList中所需的视图索引。即/home?view2=0