0

My Web.php Routes looks like following

Route::prefix('admin')->middleware(['auth:admin'])->namespace('admin')->group(function(){ 
    
    $this->get('/adminuser','UsersController@admin')->name('admin.adminuser');
    $this->get('/adminuser/create','UsersController@create_admin')->name('admin.createadminuser');
    $this->post('/adminuser/create','UsersController@create_admin');
    $this->get('/adminuser/edit/{id}','UsersController@edit_admin')->name('admin.editadminuser');
    $this->post('/adminuser/edit/{id}','UsersController@edit_admin');
    $this->post('/adminuser/delete', 'UsersController@delete_admin');

    $this->get('/user','UsersController@user')->name('admin.user');
    $this->get('/user/create','UsersController@create_user')->name('admin.createuser');
    $this->post('/user/create','UsersController@create_user');
    $this->get('/user/edit/{id}','UsersController@edit_user')->name('admin.edituser');
    $this->post('/user/edit/{id}','UsersController@edit_user');
    $this->post('/user/delete', 'UsersController@delete_user');

    $this->get('/cmspages','MasterController@cmspage')->name('admin.cmspage');
    $this->get('/cmspages/create','MasterController@create_cmspages')->name('admin.createcmspage');
    $this->post('/cmspages/create','MasterController@create_cmspages');
    $this->get('/cmspages/edit/{id}','MasterController@edit_cmspages')->name('admin.editcmspages');
    $this->post('/cmspages/edit/{id}','MasterController@edit_cmspages');
    $this->post('/cmspages/delete', 'MasterController@delete_cmspages');

});

For every new module i've to repeat this lines. how can i utilize this

Note : Route resource doesn't allow me to create custom function except [create,edit,destroy & some of inbuilt methods]. i am using single Controller for many methods

For example My register user and admin user both are retrived from the UserController

TarangP
  • 2,711
  • 5
  • 20
  • 41
  • Why don't you use resource() method for that ? As you are making resources it is logical to do it. – Svetoslav Nov 05 '20 at 10:59
  • since i read [this](https://stackoverflow.com/questions/16661292/add-new-methods-to-a-resource-controller-in-laravel) I've to write my custom functions separately – TarangP Nov 05 '20 at 11:01
  • In normal scenario if the routes are identical for each resource you can use laravel default resource and to adjust your frontend to use that standard rest structure. Out of that making 1 function to register all paths for single resource and calling it after that sounds logical.. You have marked laravel 5 so, just go to the declaration of this resource() route function and copy the idea from there :) – Svetoslav Nov 05 '20 at 11:07

1 Answers1

0

My advice is to use what Laravel suggest as Route::resource()

How ever you can always declare some function to make it easier for your custom case:


function routeResource ($url, $controllerName, $suffix, &$routeGroup) {
    $routeGroup->get($url, $controllerName . '@' . $suffix)->name('admin.' . $suffix);
    $routeGroup->get($url . '/create', $controllerName . '@create_' . $suffix)->name('admin.create' . $suffix);
    $routeGroup->post($url . '/create', $controllerName . '@create_' . $suffix);
    $routeGroup->get($url . '/edit/{id}', $controllerName . '@edit_' . $suffix)->name('admin.edit' . $suffix);
    $routeGroup->post($url . '/edit/{id}', $controllerName . '@edit_' . $suffix);
    $routeGroup->post($url . '/delete', $controllerName . '@delete_' . $suffix);
};


Route::prefix('admin')->middleware(['auth:admin'])->namespace('Admin')->group(function(){
    routeResource("/adminuser", "UserController", "user", $this);
    routeResource("/user", "UserController", "admin", $this);
});

or with Anonymous Function ..


$routeResource = function ($url, $controllerName, $suffix) {
    $this->get($url, $controllerName . '@' . $suffix)->name('admin.' . $suffix);
    $this->get($url . '/create', $controllerName . '@create_' . $suffix)->name('admin.create' . $suffix);
    $this->post($url . '/create', $controllerName . '@create_' . $suffix);
    $this->get($url . '/edit/{id}', $controllerName . '@edit_' . $suffix)->name('admin.edit' . $suffix);
    $this->post($url . '/edit/{id}', $controllerName . '@edit_' . $suffix);
    $this->post($url . '/delete', $controllerName . '@delete_' . $suffix);
};


Route::prefix('admin')->middleware(['auth:admin'])->namespace('admin')->group(function() use($routeResource){
    $routeResource("/adminuser", "UserController", "user");
    $routeResource("/user", "UserController", "admin");
});

Further customisation is up to you..

Svetoslav
  • 4,686
  • 2
  • 28
  • 43