我有这些路线:
Route::group(['middleware' => ['ForLoggedIn']], function()
{
//article actions
Route::get ('blog/gallery', 'ContentController@showGallery');
Route::get ('blog/import', 'ContentController@importArticles');
Route::get ('blog/{article}/edit', 'ContentController@editArticle');
Route::get ('blog/all', 'ContentController@allArticlesList');
Route::get ('blog/add', 'ContentController@addArticle');
});
Route::get ('blog/{article}', 'ContentController@blogArticle');
路线应该考虑订单吗?奇怪的事情发生了。 'blog / all'和'blog / gallery'最终出现在最后一个ContentController @ blogArticle中。但是,'blog / add'效果很好。
怎么可能?我尝试了所有缓存清除。什么想法可能是错的?谢谢你的任何提示。
修改: 当我评论最后一条路线时,一切正常。
答案 0 :(得分:1)
TL; DR:我不知道这是否真的回答了这个问题,但当我遇到类似问题并在GitHub上发布到laravel / framework项目时,我正准备发布我自己的问答。查看$ route:list --sort
以查看实际的路线列表。
// Handle the public
Route::resource('your-resource', YourResourceController::class, [
'only' => [
'index',
'show'
]
])
->middleware(['web']);
// Put everything else behind a wall
Route::resource('your-resource, YourResourceController::class, [
'except' => [
'index',
'show'
]
])
->middleware(['web', 'auth']);
创建(/ create)以show(/ {your-resource})结束。 route:list
显示以下内容。
your-resource
your-resource
your-resource/create
your-resource/{your-resource}
从而隐藏了“缺陷”,这就是解释顺序真的:
your-resource
your-resource
your-resource/{your-resource}
your-resource/create
由于路径块的排序。切换它们可以解决问题:
// Put everything else behind a wall
Route::resource('your-resource, YourResourceController::class, [
'except' => [
'index',
'show'
]
])
->middleware(['web', 'auth']);
// Handle the public
Route::resource('your-resource', YourResourceController::class, [
'only' => [
'index',
'show'
]
])
->middleware(['web']);
答案 1 :(得分:0)
我认为您需要遵循laravel资源路由。
如果您在一个控制器中工作,则需要在路线中遵循此顺序。
索引,创建,存储,显示,编辑,更新,销毁
在https://laravel.com/docs/5.5/controllers说明。
尝试放置此路线
Route::get ('blog/add', 'ContentController@addArticle');
前
Route::get ('blog/{article}/edit', 'ContentController@editArticle');
答案 2 :(得分:0)
一般来说,laravel会从上到下找到路线匹配
请尝试以下路线:
Route::group(['middleware' => ['ForLoggedIn']], function()
{
//article actions
Route::get ('blog/gallery', 'ContentController@showGallery');
Route::get ('blog/import', 'ContentController@importArticles');
Route::get ('blog/all', 'ContentController@allArticlesList');
Route::get ('blog/add', 'ContentController@addArt`enter code here`icle');
Route::get ('blog/{article}/edit', 'ContentController@editArticle');
});
Route::get ('blog/{article}', 'ContentController@blogArticle');