首页 > 解决方案 > 在laravel中转义斜杠

问题描述

我有几十条路线,如下列表

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/sendActthen 而不是调用@sendActroute,它会调用@show.

因为 laravel 认为这/sendAct是参数的一部分。好吧,我可以通过在每条路线上添加更多 where not(Regex) 并定义每条路线应遵循的逻辑来解决此问题,但是您有更好的解决方案吗?

标签: phplaravelroutes

解决方案


不,你错了,Laravel会选择show因为air/28-23422/sendAct不会打sendAct ,因为sendAct有按假设的方法POST,而不是GET
代替:

Route::post('air/{aNumber}/sendAct', 'AirController@sendAct');

尝试写作

Route::get('air/{aNumber}/sendAct', 'AirController@sendAct');
//     ^^^

^[^\/]*用作组的 where 子句aNumber


推荐阅读