如何在 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 Auth 为两种用户修改

如何在 laravel 中为资源控制器添加自定义函数?

在 Laravel 中为 GET 和 POST 使用不同的控制器,但使用相同的名称

如何在 laravel 中为开发和生产使用不同的 cors 配置

如何在 cakephp 中为不同的模型设置不同的布局

在 Laravel 中为资源控制器添加新方法