【问题标题】:Laravel 8: Extending UserCrudController from Package BackPack Permission-ManagerLaravel 8:从包 BackPack 权限管理器扩展 UserCrudController
【发布时间】:2021-11-13 08:30:38
【问题描述】:

我想在用户实体中添加部门字段,所以我决定从这个包https://github.com/Laravel-Backpack/PermissionManager扩展默认的UserCrudController。

所以我用这个命令创建了一个自定义控制器php artisan make:controller Admin\UserController

在文件 \app\Providers\AppServiceProvider.php 我也添加了这个(按照说明)

public function register()
    {
        $this->app->bind(
            \Backpack\PermissionManager\app\Http\Controllers\UserCrudController::class, 
            \App\Http\Controllers\Admin\UserController::class,
        );

    }

那么这里是\App\Http\Controllers\Admin\UserController的内容

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Backpack\PermissionManager\app\Http\Controllers\UserCrudController;
use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;

class UserController extends UserCrudController
{
    public function setupCreateOperation()
    {
        parent::setupCreateOperation();

        $fields['departments'] = [
            'label'     => 'Departments',
            'type'      => 'select2_multiple',
            'name'      => 'tags',
            'entity'    => 'tags',
            'attribute' => 'name',
            'model'     => "App\Models\Tag",
            'pivot'     => true,
            'wrapper' => ['class' => 'form-group col-6 col-md-4'],
            'options'   => (function ($query) {
                return $query->where('type', 'Department')->get();
            }),
        ];

        foreach($fields as $key=>$field) {
            CRUD::addField($field);
        }
        
    }

    public function setupUpdateOperation()
    {
        parent::setupUpdateOperation();
        $this->setupCreateOperation();

        
    }
}

一切似乎都很好,我可以看到所有默认信息,例如:用户名、电子邮件、角色、权限和我的自定义部门字段。

问题是,当我尝试修改现有用户添加一些部门时,我得到了这个错误

The email has already been taken.
The password field is required.

不知何故,它被视为新用户注册。可能是什么问题?

【问题讨论】:

    标签: permissions laravel-8 laravel-backpack


    【解决方案1】:

    不知何故,我通过将setupCreateOperation 复制到 setupUpdateOperation 解决了这个问题。

    namespace App\Http\Controllers\Admin;
    
    use App\Http\Controllers\Controller;
    use Illuminate\Http\Request;
    use Backpack\PermissionManager\app\Http\Controllers\UserCrudController;
    use Backpack\CRUD\app\Library\CrudPanel\CrudPanelFacade as CRUD;
    
    class UserController extends UserCrudController
    {
    
        ...     
    
        public function setupUpdateOperation()
        {
            parent::setupUpdateOperation();
    
            $fields['departments'] = [
                'label'     => 'Departments',
                'type'      => 'select2_multiple',
                'name'      => 'tags',
                'entity'    => 'tags',
                'attribute' => 'name',
                'model'     => "App\Models\Tag",
                'pivot'     => true,
                'wrapper' => ['class' => 'form-group col-6 col-md-4'],
                'options'   => (function ($query) {
                    return $query->where('type', 'Department')->get();
                }),
            ];
    
            foreach($fields as $key=>$field) {
                CRUD::addField($field);
            }
        }
    }
    

    希望有一种更短的方法来减少这种重复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-25
      • 2021-01-06
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      相关资源
      最近更新 更多