laravel nested route with prefix and resource dosent work

2.8k Views Asked by At

I have many routes like these :

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');
...

now I want to write these with prefix ,group and resources but I have a problem when write like this :

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');
         });

});

why return 404 when I try to access show address like this :

example.com/dashboard/orders/4
3

There are 3 best solutions below

0
On

Okay i think i got it, all you need to pass {id} in the url then dd($id) in your controller method.

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');
    });
});

I suggest you to use proper namespace and make sure your classController redirect to exact method.

4
On

I'm using group routing like this.

<?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');
    });
});

Try this. May be this will help you.

1
On

You need to write resource instead of 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');
         });

});