【问题标题】:Laravel resource route blocking routes without parametersLaravel 资源路由阻塞无参数路由
【发布时间】:2015-10-25 20:31:47
【问题描述】:

我正在努力扩展资源宁静控制器。我有 PostController,我在其中创建了一个特殊的函数 getNext(),它应该返回给我未来的第一个帖子。现在,当我添加路由时它不起作用,除非我添加一些(无用的)路由器参数,或者完全更改 url:

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!

现在我不知道在资源丰富的控制器中添加没有参数的自定义路由有什么问题,但也许你有答案!

【问题讨论】:

  • 您是否尝试反转另一个?

标签: php rest laravel laravel-5


【解决方案1】:

这是由于路线的顺序。 resource controller 中包含一条 post/{value} 路由,它会捕获您的帖子/下一个。

要修复,您可以将它们翻转为

  Route::get('post/next', 'PostController@getNext');
  Route::resource('post', 'PostController');

作为一般规则,将更具体的 url 放在最前面,“catch-alls”放在最后。

【讨论】:

  • 这行得通,谢谢!另一个答案之前向我解释过,但答案已被删除,我无法解决......不知道为什么
猜你喜欢
  • 1970-01-01
  • 2018-04-07
  • 2021-05-24
  • 1970-01-01
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
相关资源
最近更新 更多