我有数十条路线,如下所示
Route::group([
'where' => ['aNumber' => '.*'],
], function () {
Route::get('air/{aNumber}/tools', 'AirController@tools');
Route::post('air/{aNumber}/handled', 'AirController@handled');
Route::post('air/{aNumber}/notHandled', 'AirController@notHandled');
Route::get('air/{aNumber}/act', 'AirController@act');
Route::post('air/{aNumber}/sendAct', 'AirController@sendAct');
Route::get('air/{aNumber}', 'AirController@show');
});
{anumber}
参数可能像这些23-349493/4
一样,尽管这种参数会与其他路由产生一些冲突,所以例如,如果我们要调用air/28-23422/sendAct
而不是调用@sendAct
路线,它将称为@show
。
因为laravel认为/sendAct
是该参数的一部分。好吧,我可以通过在每个路由上添加更多where not(Regex)并定义每个路由应遵循的逻辑来解决此问题,但是您对此问题有更好的解决方案吗?
答案 0 :(得分:1)
不,您错了,Laravel
将选择show
,因为air/28-23422/sendAct
不会按sendAct
,因为sendAct
具有假定的方法{{1} },而不是POST
。
代替:
GET
尝试写作
Route::post('air/{aNumber}/sendAct', 'AirController@sendAct');
或使用Route::get('air/{aNumber}/sendAct', 'AirController@sendAct');
// ^^^
作为^[^\/]*
组的where子句