Рюкзак для Laravel - Permissionmanager: Невозможно создать нового пользователя - PullRequest
0 голосов
/ 30 ноября 2018

У меня следующая проблема.Я использую Backpack for Laravel с PermissionManager Extension.. По умолчанию вы должны войти через свой адрес электронной почты.Тем не менее, вы можете изменить это, чтобы войти с именем пользователя.Работает нормально, если я (например) заполнил базу данных.Но по какой-то странной причине я не могу создавать новых пользователей через PermissionManager PermissionManager Extension.Если я попробую следующее сообщение об ошибке, результат:

SQLSTATE [HY000]: общая ошибка: 1364 Поле «имя» не имеет значения по умолчанию (SQL: вставить в users (updated_at, created_at) значений (2018-11-29 22:26:32, 2018-11-29 22:26:32))

Только для тестирования я дал name column значение по умолчанию, но сообщение об ошибке то же самое, за исключением того, что ошибка теперь:

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

Это просто занимает следующий столбец в моей базе данных.

Конечно, я изменил CRUD-запросы, формы-запросы и так далее, чтобы хранить имя пользователя вместо электронной почты.Но похоже, что Запрос не получает значения моей формы.Он только пытается сохранить метки времени.

Странная вещь: если я переверну все, что я сделал в Контроллерах и т. Д., И снова создам столбец электронной почты, он будет работать нормально ... Я что-то пропустил?Как я могу решить эту ошибку и сохранить пользователей с именем пользователя вместо электронной почты?

Редактировать:

enter image description here

Это даже странно... Данные публикуются.

Редактировать 2:
После тщательного изучения сообщений об ошибках я обнаружил следующее: enter image description hereКак видите, массив с моими заполненными данными все еще здесь.enter image description here Однако в следующем случае массив parameters будет полностью пустым, а также массив $instance.

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Когда эта проблема возникла у меня, я думаю, что я вызвал ее, запустив 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.

0 голосов
/ 10 декабря 2018

Никогда ранее не использовал этот пакет, но я просмотрел файлы этого пакета на github для решения вашей проблемы, я увидел кое-что в файле UserCrudController.php.Файл обеспечивает пользовательские операции CRUD по умолчанию.Создание и обновление элементов формы определяются с помощью метода настройки в этом контроллере.Но я не вижу никакого определения для username поля.

, насколько я понимаю, ваша пользовательская таблица имеет username, а в вашей модели $fillable переменная содержит username, а пользовательская форма создания / обновления не отправляет поле username на контроллер.

Можете ли вы попробовать определить username элемент формы в UserCrudController.php файле для username или удалить атрибут username из $ fillable в вашей модели.

Надеюсь, это решит вашу проблему.

0 голосов
/ 05 декабря 2018

Шаг 1: Чтобы использовать имя пользователя, вам нужно отредактировать приложение / Http / Controllers / Auth / LoginController и добавить новый метод с именем username

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

Шаг 2: В модели пользователя убедитесь, что вы используетеAuthenticatesUsers отслеживает и добавляет поле имени пользователя в массив с возможностью заполнения.Шаг 3: Убедитесь, что в app / Http / Controllers / Auth / RegisterController вы добавили проверку имени пользователя и добавили поле имени пользователя в методе создания.

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

Вот и все.Надеюсь, это решит вашу проблему.

...