拥有一些系统,每个系统都有一个单独的控制器,我试过这个:
Route::get('/system/{system_id}', 'system_one_Controller@index')->where('system_id', '1');
Route::get('/system/{system_id}', 'system_two_Controller@index')->where('system_id', '2');
...
Route::get('/system/{system_id}', 'system_n_Controller@index')->where('system_id', 'n');
但很明显,只应用了最后一行,即/ system / n 最后一行之前的所有路由,如/ system / 1,返回“抱歉,找不到您要查找的页面。”
我知道我可以使用简单的行:
Route::get('/system/1', 'system_one_Controller@index');
但是,有些系统共享同一页面,我想在视图中使用system_id参数。 e.g。
/system/1/users
/system/2/users
两个路由都将使用公共视图,这将使用system_id参数确定系统
我也更喜欢为每个系统使用单独的控制器,因为每个系统可能有很多子页面,如:
/system/1
/system/1/users
/system/1/posts
/system/1/post/{post_id}
/system/1/post/{post_id}/comment/{comment_id}
和其他系统可能有完全不同的具有不同路由的子页面(也可能有类似的路由和常见的视图,如前所述)。
答案 0 :(得分:1)
我可以看到两个选项
首先这样做:
Route::get('/system/1', 'system_one_Controller@index');
Route::get('/system/2', 'system_two_Controller@index');
或者第二次这样做:
Route::get('/system/{system_id}', 'system_Controller@index');
并在控制器的索引函数中执行if或switch:
if ($system_id === 1){
} else if ($system_id ===2){
}
编辑:
如果要为每个索引使用不同的控制器,则每个索引必须具有不同的路由。 (所以我提到的第一个选项)
如果每个系统都有不同的控制器,为什么不将该系统的索引硬编码为该控制器中的静态属性或类似的东西?您不需要将其作为参数传递给控制器,因为它不是动态的。