Обработка $guarded полей в Laravel Backpack

Насколько я понял (поправьте меня, если я ошибаюсь), рюкзак работает только с заполняемыми полями. Разве вся суть Laravel не в разделении между $fillable и $guarded?

MWE:

В User.php:

class User extends Authenticatable {
    protected $guarded = ['password'];
}

В UserCrudController.php:

public function update(UpdateRequest $request)
{
    $this->handlePasswordInput($request);
    return parent::updateCrud($request);
}

Приведет к:

SQLSTATE[HY000]: General error: 1364 Field 'password' doesn't have a default value (SQL: insert into `users` (`name`, `email`, `updated_at`, `created_at`)

При использовании «строгой» настройки для MySQL, поскольку поле «пароль» защищено.

Есть ли правильный обходной путь для разделения полей $fillable и $guarded в Backpack?

Спасибо.


person Carenath    schedule 09.01.2018    source источник
comment
Вы можете использовать только одно свойство, защищенное или заполняемое, $guarded представляет поля из черного списка, а $fillable представляет поля из белого списка.   -  person Muhammad Sadiq    schedule 10.01.2018
comment
Вы уже проверили значение пароля из пользовательского ввода?   -  person Set Kyar Wa Lar    schedule 10.01.2018
comment
Да, значение пароля проверяется перед   -  person Carenath    schedule 11.01.2018


Ответы (1)


Вы должны использовать только один — либо $fillable, либо $guarded. Я рекомендую использовать $fillable, это более перспективно.

Из документов Laravel:

Хотя $fillable служит «белым списком» атрибутов, которые должны быть массово назначаемыми, вы также можете использовать $guarded. Свойство $guarded должно содержать массив атрибутов, которые вы не хотите назначать массово. Все остальные атрибуты, не входящие в массив, будут доступны для массового назначения. Таким образом, $guarded действует как «черный список». Конечно, вы должны использовать либо $fillable, либо $guarded, но не оба варианта одновременно.

person tabacitu    schedule 19.02.2018