Laravel背包-Permissionmanager:无法创建新用户

时间:2018-11-29 21:33:17

标签: php laravel laravel-5 permissions backpack-for-laravel

我有以下问题。我在PermissionManager Extension.上使用的是Laravel背包,默认情况下,您必须通过电子邮件地址登录。但是,您可以更改该名称以使用用户名登录。如果我(例如)为数据库播种,则工作正常。但是出于某些奇怪的原因,我无法通过PermissionManager PermissionManager Extension创建新用户。如果我尝试以下错误消息是结果:

  

SQLSTATE [HY000]:常规错误:1364字段“名称”没有   默认值       (SQL:插入usersupdated_atcreated_at中)       值(2018-11-29 22:26:32,2018-11-29 22:26:32))

仅出于测试目的,我为name列提供了默认值,但是错误消息是一样的,除了现在的错误是:

  

Field 'username' doesn't have a default value.

它只占用数据库中的下一列。

当然,我更改了CRUD-Requests,Form-Requests等,以存储用户名而不是电子邮件。但看起来Request并没有获取我的表单值。它只会尝试存储时间戳。

奇怪的事情:如果我撤消了在Controllers中所做的所有工作,依此类推,然后再次创建电子邮件列,它将正常工作...我是否忽略了某些内容? 如何解决此错误,并使用用户名而不是电子邮件存储用户?

编辑:

enter image description here

这甚至更奇怪...数据被发布了。

编辑2:
仔细查看错误消息后,我发现了以下内容: enter image description here 如您所见,带有我填写的数据的数组仍然在这里。 enter image description here 但是,在下一个实例中,parameters数组和$instance数组都是完全空的。

3 个答案:

答案 0 :(得分:0)

第1步:要使用用户名,您必须编辑app / Http / Controllers / Auth / LoginController并添加一个名为username的新方法

public function username(){
    return 'username';
}

步骤2:在“用户”模型中,请确保您使用AuthenticatesUsers特质并在可填充数组中添加用户名字段。 步骤3:确保在app / Http / Controllers / Auth / RegisterController中添加了用户名验证并在create方法中添加了用户名字段。

protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'username' => $data['username'],
        'email'    => $data['email'],
        'password' => Hash::make($data['password']),
    ]);
}

仅此而已。希望它能解决您的问题。

答案 1 :(得分:0)

当我遇到此问题时,我认为是由运行php artisan vendor:publish而不是按照说明先运行php artisan vendor:publish --provider="Backpack\PermissionManager\PermissionManagerServiceProvider引起的。

我的config/laravel-permission.php文件不仅具有权限,而且用户模型不正确,但整个文件都是spatie的版本,而不是Laravel Backpack的版本。我的猜测是,spatie的vendor:publish寄存器通常在Laravel Backpack PermissionManager之前运行。

答案 2 :(得分:0)

以前从未使用过此软件包,但我从github回顾了此软件包的文件来解决您的问题,我在UserCrudController.php文件中看到了一些东西。该文件提供默认的用户CRUD操作。创建和更新表单项通过此控制器中的设置方法定义。但是我没有看到username字段的任何定义。

据我了解,您的用户表中有一个username,并且在您的模型中$fillable变量包含username,并且用户创建/更新表单未发布username字段到控制器。

您可以尝试在username的{​​{1}}文件中定义UserCrudController.php表单元素,还是从模型的$ fillable中删除username属性。

我希望这些可以解决您的问题。