请如何将数据从显示方法共享到两个不同的视图

问题描述

请问是否有一种方法可以将一种控制器方法数据共享到多个视图,

这是CategoryController的显示方法

/**
 * display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show($id)
{
    $category = Category::find($id);

    $users = $category->user;
  
    return view('categories.show')->with('users',$users);
}

我想与另一个页面profile-display.blade.PHP共享相同的数据,而无需创建另一个控制器。

解决方法

@Adam,这会为您提供帮助。

route.php

Route::get('users/{id}','CategoryController@show')->name('profile');

Route::get('Category/{id}','CategoryController@show')->name('category');

CategoryController.php

public

function show($request,$id) {
    $category = Category::find($id);

    $users = $category->user;
    if ($request::route()->getName() == 'category') {
        return view('categories.show')->with('users',$users);
    } else {
        return view('profile.show')->with('users',$users);
    }
}
,

不同的路线可以使用同一控制器,但是要让一个控制器呈现多个视图而又不会造成条件混乱,或者至少只是制定一个新的控制器/方法,将会给您带来更多的麻烦。

但是,通过将模型绑定与路由结合在一起,您可以节省部分代码,以实现更苗条的方法:

routes.php

Route::get('categories/{category}','CategoryController@show');

,然后在CategoryController.php中:

public function show(Category $category)
{  
    return view('categories.show')->with('users',$category->user);
}

这将使模型绑定能够自动实例化模型(如果存在),如果不存在则返回404。

您可以重复该过程以获取第二个视图,但是只需重用同一控制器即可(我个人根本不希望这样做)。只需在同一控制器中添加路由和新方法:

routes.php

Route::get('categories/{category}','CategoryController@show');
Route::get('profile-display','CategoryController@profileDisplay');

,然后在CategoryController.php中:

public function show(Category $category)
{  
    return view('categories.show')->with('users',$category->user);
}

public function profileDisplay()
{  
    return view('profile-display');
}

我尚未向profileDisplay方法添加任何模型绑定,因为我无法真正理解如何将类别附加到个人资料显示页面(顾名思义),但这可以你一些粗略的想法。

,

您可以使用\Illuminate\Support\Facades\View::share('foo','bar');