【问题标题】:How to utilize Web Routes如何使用网络路由
【发布时间】:2021-02-18 01:47:15
【问题描述】:

我的Web.php 路线如下所示

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

});

对于每个新模块,我都必须重复这一行。我该如何利用这个

注意: 路由资源不允许我创建自定义函数,除了[创建、编辑、销毁和一些内置方法]。我在许多方法中使用单个控制器

例如,我的注册用户和管理员用户都是从 UserController 检索的

【问题讨论】:

  • 你为什么不使用 resource() 方法呢?当您制作资源时,这样做是合乎逻辑的。
  • 自从我阅读了this 我必须单独编写我的自定义函数
  • 在正常情况下,如果每个资源的路由相同,您可以使用 laravel 默认资源并调整您的前端以使用该标准休息结构。除了制作 1 个函数来注册单个资源的所有路径并在这之后调用它听起来合乎逻辑.. 你已经标记了 laravel 5 所以,只需转到这个 resource() 路由函数的声明并从那里复制这个想法 :)

标签: php laravel laravel-5 routes


【解决方案1】:

我的建议是使用 Laravel 建议的 Route::resource()

您总是可以声明一些函数来简化您的自定义案例:


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

或使用匿名函数..


$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");
});

进一步的自定义取决于您..

【讨论】:

  • 这是巧妙路由的标准方法吗?
  • Route::resource 只是一个生成多个路由的方法。我的解决方案是采用类似的方法,但使用您自己制作的代码。
  • 实施时听起来不错。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
相关资源
最近更新 更多