Laravel 5.5路由命令不起作用

时间:2017-09-22 20:33:17

标签: laravel routing

我有这些路线:

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'效果很好。

怎么可能?我尝试了所有缓存清除。什么想法可能是错的?谢谢你的任何提示。

修改: 当我评论最后一条路线时,一切正常。

3 个答案:

答案 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');