如何在 laravel 中为两种不同的控制器功能方法使用相同的路由
Posted
技术标签:
【中文标题】如何在 laravel 中为两种不同的控制器功能方法使用相同的路由【英文标题】:how can i use same route for two different controller function methods in laravel 【发布时间】:2018-04-25 08:57:30 【问题描述】:第一个控制器
public function index()
$comproducts = Comproduct::paginate(6);
$items = Item::orderBy('name')->get();
return view('computer', compact(['comproducts', 'items']));
第二个控制器
public function index()
return view('search.index');
我想将这两种不同的控制器功能用于一条路线。
这是我的路线名称
Route::get('/computer', [
'uses' => 'ComputerProductsController@index',
'as' => 'computer.list'
]);
【问题讨论】:
以及如何决定何时调用哪个函数? 【参考方案1】:laravel 需要以某种方式确定您想要的确切方法。例如,您可以传递参数,该参数将识别要调用的方法。
public function index(Request $request)
// if param exists, call function from another controller
if($request->has('callAnotherMethod'))
return app('App\Http\Controllers\yourControllerHere')->index();
$comproducts = Comproduct::paginate(6);
$items = Item::orderBy('name')->get();
return view('computer', compact(['comproducts', 'items']));
【讨论】:
【参考方案2】:你不能。如果你想将搜索功能添加到你的第一个控制器的索引页面,你应该确定在你的控制器中显示哪个页面。
一个可能的示例控制器:
public function index(Illuminate\Http\Request $request)
// If the URL contains a 'search' parameter
// (eg. /computer?search=intel)
if ($request->has('search'))
// Do some searching here and
// show the search results page
return view('search.index');
$comproducts = Comproduct::paginate(6);
$items = Item::orderBy('name')->get();
return view('computer', compact(['comproducts', 'items']));
【讨论】:
以上是关于如何在 laravel 中为两种不同的控制器功能方法使用相同的路由的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel 中为 GET 和 POST 使用不同的控制器,但使用相同的名称