批量赋值
最后更新于:2022-04-01 15:11:44
在建立一个新的模型时,您把属性以数组的方式传入模型的构造方法,这些属性值会经由批量赋值存成模型数据。这一点非常方便,然而,若盲目地将用户输入存到模型时,可能会造成严重的安全隐患。如果盲目的存入用户输入,用户可以随意的修改任何以及所有模型的属性。基于这个理由,所有的 Eloquent 模型默认会阻止批量赋值 。
我们以在模型里设定 `fillable` 或 `guarded` 属性作为开始。
## 定义模型 Fillable 属性
`fillable` 属性指定了哪些字段支持批量赋值 。可以设定在类的属性里或是实例化后设定。
~~~
class User extends Model {
protected $fillable = ['first_name', 'last_name', 'email'];
}
~~~
在上面的例子里,只有三个属性允许批量赋值。
## 定义模型 Guarded 属性
`guarded` 与 `fillable` 相反,是作为「黑名单」而不是「白名单」:
~~~
class User extends Model {
protected $guarded = ['id', 'password'];
}
~~~
> 注意: 使用 guarded 时, Input::get() 或任何用户可以控制的未过滤数据,永远不应该传入 save 或 update 方法,因为没有在「黑名单」内的字段可能被更新。
## 阻挡所有属性被批量赋值
上面的例子中, id 和 password 属性不会被批量赋值,而所有其他的属性则允许批量赋值。您也可以使用 `guard` 属性阻止所有属性被批量赋值:
~~~
protected $guarded = ['*'];
~~~