带有前缀和资源的laravel嵌套路由不起作用

Posted

技术标签:

【中文标题】带有前缀和资源的laravel嵌套路由不起作用【英文标题】:laravel nested route with prefix and resource dosent work 【发布时间】:2019-03-04 03:38:39 【问题描述】:

我有很多这样的路线:

Route::resource('/dashboard/class', 'classController');
Route::get('/dashboard/class/get-by-filter', 'classController@getByFilter');
Route::get('/dashboard/class/get-by-search', 'classController@getBySearch');
...
...

Route::resource('/dashboard/orders', 'OrderController');
Route::get('/dashboard/orders/get-by-filter', 'OrderController@getByFilter');
...

现在我想用前缀、组和资源来写这些,但是这样写时我遇到了问题:

Route::prefix('dashboard')->group(function()
    

       Route::prefix('class')->group(function()
         
            Route::resource('/', 'classController');
            Route::get('/get-by-filter', 'classController@getByFilter');
            Route::get('/get-by-search', 'classController@getBySearch');
         );

       Route::prefix('orders')->group(function()
         
            Route::resource('/', 'OrderController');
            Route::get('/get-by-filter', 'OrderController@getByFilter');
            Route::get('/get-by-search', 'OrderController@getBySearch');
         );

);

为什么当我尝试访问这样的显示地址时返回 404:

example.com/dashboard/orders/4

【问题讨论】:

【参考方案1】:

你需要写resource而不是get

Route::prefix('dashboard')->group(function()
    

       Route::prefix('class')->group(function()
         
            Route::resource('/', 'classController');
            Route::get('/get-by-filter', 'classController@getByFilter');
            Route::get('/get-by-search', 'classController@getBySearch');
         );

       Route::prefix('orders')->group(function()
         
            Route::resource('/', 'OrderController');
            Route::get('/get-by-filter', 'OrderController@getByFilter');
            Route::get('/get-by-search', 'OrderController@getBySearch');
         );

);

【讨论】:

对不起,那是我的输入错误。我这样做了,但它还不起作用!【参考方案2】:

我正在使用这样的组路由。

<?php
Route::group(['prefix' => 'dashboard'], function() 

    Route::group(['prefix' => 'class'], function() 
        Route::resource('/', 'classController');
        Route::get('/get-by-filter', 'classController@getByFilter');
        Route::get('/get-by-search', 'classController@getBySearch');
    );

    Route::group(['prefix' => 'orders'], function() 
        Route::resource('/', 'OrderController');
        Route::get('/get-by-filter', 'OrderController@getByFilter');
        Route::get('/get-by-search', 'OrderController@getBySearch');
    );
);

试试这个。或许这会对你有所帮助。

【讨论】:

感谢您的回复。我尝试这种方式,但它还没有工作! 并在控制台php artisan route:list 上运行此命令,然后这将显示所有路由列表。 当我运行这个: php artisan route:list 时,我可以看到有这样的路由:/dashboard/orders/。但是当我输入 url 得到 404 err. 首先清除您的laravel.log 文件并再次运行点击订单网址然后检查laravel.log 文件。错误将在那里记录。【参考方案3】:

好的,我想我明白了,您只需在 url 中传递 id,然后在控制器方法中传递 dd($id)。

Route::group(['prefix'=>'dashboard'], function()

    Route::group(['prefix'=>'class'], function()
    
        Route::resource('/', 'classController');
        Route::get('/get-by-filter', 'classController@getByFilter');
        Route::get('/get-by-search', 'classController@getBySearch');
    );
    Route::group(['prefix'=>'orders'], function()
    
        Route::resource('/id','classController');
        Route::get('/get-by-filter', 'OrderController@getByFilter');
        Route::get('/get-by-search', 'OrderController@getBySearch');
    );
);

我建议您使用正确的命名空间并确保您的 classController 重定向到确切的方法。

【讨论】:

以上是关于带有前缀和资源的laravel嵌套路由不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 路由组前缀 - 变量不起作用

Laravel:布局中的脚本和图像源在带有前缀的url中不起作用

我的一些 Laravel 路由(PUT 和 DELETE)在共享主机上不起作用

Laravel 5.0 路由模型绑定在销毁操作中不起作用

为啥嵌套循环在 laravel 中不起作用

Angular 8嵌套路由和多个路由器插座不起作用