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
相关产品推荐
相关产品推荐

