问题描述
请问是否有一种方法可以将一种控制器方法的数据共享到多个视图,
/**
* 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');