我对这种情况非常困惑。我有两个资源名称的路由。
Route::resource('product', 'Product\AreaManagerProductController');
Route::resource('product', 'Product\SystemAdminProductController');
我需要将其作为一个,因为我有一个上下文绑定。
$this->app->when(AreaManagerProductController::class)
->needs(ProductInterface::class)
->give(AreaManagerProductRepository::class);
$this->app->when(SystemAdminProductController::class)
->needs(ProductInterface::class)
->give(SystemAdminProductRepository::class);
上下文绑定工作正常......但我需要像这样改变我的路线。
Route::resource('product_area_manager', 'Product\AreaManagerProductController');
Route::resource('product_system_admin', 'Product\SystemAdminProductController');
我创建了ProductController
和某种奇怪的解决方案。
public function index(){
//Create a conditional statement base on user
return app('App\Http\Controllers\Product\AreaManagerProductController')->index();
}
它可能有效,但它不会触发中间件......在这种情况下,最佳做法是什么。 TY
答案 0 :(得分:3)
你可以像这样使用你的路线
Route::group(['prefix' => 'product', 'namespace' => 'Product', 'middleware' => '<your middleware>'], function() {
Route::resource('area_manager', 'AreaManagerController');
Route::resource('system_admin', 'SystemAdminController');
});
我对路由进行分组的原因是为了减少冗余,我从控制器名称中删除Product的原因是,因为已经有namespace Product
,所以不需要长类名。
如果您想要访问AreaManagerController
和SystemAdminController
中的某些方法,只需将ProductController
扩展到这些控制器。
如果要为这些控制器内的操作添加一些特定的middleware
,我在middleware
中添加了一个route group
子句,如果不需要,它将影响这些控制器删除它。
希望这会对你有所帮助。