You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel项目路由文件中如何调用同一个控制器的多个方法?

Laravel同控制器多方法路由合并实现语法

你提供的两条路由存在URI、路由名重复的冲突问题,无法直接绑定两个控制器方法,可根据实际需求选择以下实现方式:

方案1:路由分组(适用不同URI对应不同方法,复用公共配置)

将相同前缀、中间件的路由归入同一分组,避免重复写公共配置:

// Laravel 6/7 版本写法(控制器字符串引用)
Route::prefix('openreports')->middleware('auth')->group(function () {
    Route::get('grade-chart', 'InventoryController@gradeCodeDeliveriesChart')->name('openreports.gradeChart');
    Route::get('year-chart', 'InventoryController@yearDeliveriesChart')->name('openreports.yearChart');
});

// Laravel 8+ 版本写法
use App\Http\Controllers\InventoryController;
Route::prefix('openreports')->middleware('auth')->group(function () {
    Route::get('grade-chart', [InventoryController::class, 'gradeCodeDeliveriesChart'])->name('openreports.gradeChart');
    Route::get('year-chart', [InventoryController::class, 'yearDeliveriesChart'])->name('openreports.yearChart');
});

方案2:单URI动态调用方法(适用同一URI根据参数区分调用方法)

如果需要保留单个openreports/chart URI,可通过闭包路由根据请求参数动态转发到对应控制器方法:

// Laravel 6/7 版本写法
Route::get('openreports/chart', function (\Illuminate\Http\Request $request) {
    $controller = app('App\Http\Controllers\InventoryController');
    return $request->query('type') === 'grade' 
        ? $controller->gradeCodeDeliveriesChart($request)
        : $controller->yearDeliveriesChart($request);
})->middleware('auth')->name('openreports.chart');

// Laravel 8+ 版本写法
use App\Http\Controllers\InventoryController;
Route::get('openreports/chart', function (\Illuminate\Http\Request $request) {
    $controller = app(InventoryController::class);
    return $request->query('type') === 'grade' 
        ? $controller->gradeCodeDeliveriesChart($request)
        : $controller->yearDeliveriesChart($request);
})->middleware('auth')->name('openreports.chart');

内容的提问来源于stack exchange,提问作者user14471641

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:36:01