在Laravel框架php中路由冲突

时间:2019-02-21 08:12:06

标签: php laravel api

我已经 援助} api

现在我要 a / b

但是它没有击中a / b,而是击中了a / {id},并将b设为{id}

如果我不允许更改a / {id},如何创建a / b?

Laravel框架。

$apiRoutes = [
        // Dev routes
        'get_a_by_id' => ['get',      'a/{id}','AController@getA'],

        // App routes
        'fetch_all_b'                                  => ['get','a/b', 'BController@getB'],
        ]

这是我的代码route.php 甚至重新排序也不起作用。

3 个答案:

答案 0 :(得分:3)

你能做的是

a/b上方的第a/{id}处并添加->where(['id' => '[0-9]+');,这将确保仅在有数值的情况下触发路线a/{id}

您可以根据需要更改正则表达式。

Route::get('a/b', function () {
    //code
});

Route::get('a/{id}', function ($id) {
    //code
})->where(['id' => '[0-9]+');

答案 1 :(得分:2)

这取决于您定义它们的顺序,首先需要创建特定的路由a/b,然后在通配符下面。

Route::get('a/b', function () {
    dd('testing b');
});

Route::get('a/{id}', function ($id) {
    dd('testing', $id);
});

答案 2 :(得分:0)

简短的答案是在a/b之前定义a/{id}

这是我的例子:

Route::get('/v1/smsportal/search/{type?}/{search?}', 'SMSPortals@search');
Route::get('/v1/smsportal/{id?}', 'SMSPortals@get');
Route::post('/v1/smsportal', 'SMSPortals@save');
Route::post('/v1/smsportal/{id?}', 'SMSPortals@update');
Route::delete('/v1/smsportal/{id?}', 'SMSPortals@delete');
如果我要求/v1/smsportal/search,将在/v1/smspotal/{id}之前调用

search