我正努力扩展资源缓和控制器。我有PostController,我在其中创建了一个特殊的函数getNext(),该函数应该在第一篇未来的帖子中返回给我。现在,当我添加路由时,除非我添加一些(无用的)路由器参数或完全更改网址,否则它不起作用:
Route::group(['prefix' => '/api'], function() {
Route::resource('post', 'PostController');
Route::get('post/next', 'PostController@getNext');
});
-> GET /api/post/next returns 200 OK with no data whatsoever
// result of 'php artisan route:list | grep next'
GET|HEAD | api/post/next | App\Http\Controllers\PostController@getNext
Route::group(['prefix' => '/api'], function() {
Route::resource('post', 'PostController');
Route::get('post/next/{fakeParam?}', 'PostController@getNext');
});
-> GET /api/post/next returns 200 OK with no data whatsoever
-> GET /api/post/next/YOLO returns the correct data !!!
Route::group(['prefix' => '/api'], function() {
Route::resource('post', 'PostController');
Route::get('omg/next', 'PostController@getNext');
});
-> GET /api/omg/next returns the correct data!
现在我不知道在资源丰富的控制器中添加没有参数的自定义路线有什么不对,但也许你有答案!
答案 0 :(得分:2)
由于路线的顺序。 resource controller中包含post/{value}
的路由,可以捕获您的帖子/下一个。
要解决此问题,您可以将它们翻转为
Route::get('post/next', 'PostController@getNext');
Route::resource('post', 'PostController');
作为一般规则,将更具体的网址放在" catch-alls"最后。