批量赋值
2018-02-24 15:52 更新
在建立一个新的模型时,您把属性以数组的方式传入模型的构造方法,这些属性值会经由批量赋值存成模型数据。这一点非常方便,然而,若盲目地将用户输入存到模型时,可能会造成严重的安全隐患。如果盲目的存入用户输入,用户可以随意的修改任何以及所有模型的属性。基于这个理由,所有的 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 = ['*'];
以上内容是否对您有帮助:
← 基本用法
更多建议: