【问题标题】:Laravel Backpack $guarded fields handlingLaravel 背包 $guarded 字段处理
【发布时间】:2018-06-19 02:13:26
【问题描述】:

据我了解(如果我错了请纠正我),背包只处理 $fillable 字段。整个 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 使用“严格”设置时,因为“密码”字段是 $guarded。

是否有任何适当的解决方法来分隔 Backpack 中的 $fillable 和 $guarded 字段?

谢谢。

【问题讨论】:

  • 你只能使用一个属性,无论是受保护的还是可填充的,$guarded 代表列入黑名单的字段,$fillable 代表列入白名单的字段。
  • 您是否已经检查过用户输入的密码值?
  • 是的,之前检查过密码值

标签: php mysql laravel eloquent laravel-backpack


【解决方案1】:

您应该只使用一个 - $fillable 或 $guarded。我建议使用 $fillable,它更具前瞻性。

来自Laravel docs

虽然 $fillable 用作属性的“白名单”,但应该 批量分配,你也可以选择使用 $guarded。 $守卫 property 应包含您不想包含的属性数组 可批量分配。不在数组中的所有其他属性将是质量 可分配的。因此,$guarded 的功能类似于“黑名单”。 当然,你 应该使用 $fillable 或 $guarded - 不能同时使用。

【讨论】:

    猜你喜欢
    • 2020-09-22
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    • 2020-09-24
    • 2011-11-30
    • 2015-10-22
    • 2018-05-16
    • 1970-01-01
    相关资源
    最近更新 更多