批量赋值

2018-02-24 15:52 更新

在建立一个新的模型时,您把属性以数组的方式传入模型的构造方法,这些属性值会经由批量赋值存成模型数据。这一点非常方便,然而,若盲目地将用户输入存到模型时,可能会造成严重的安全隐患。如果盲目的存入用户输入,用户可以随意的修改任何以及所有模型的属性。基于这个理由,所有的 Eloquent 模型默认会阻止批量赋值 。

我们以在模型里设定 fillableguarded 属性作为开始。

定义模型 Fillable 属性

fillable 属性指定了哪些字段支持批量赋值 。可以设定在类的属性里或是实例化后设定。

class User extends Model {
    protected $fillable = ['first_name', 'last_name', 'email'];
}

在上面的例子里,只有三个属性允许批量赋值。

定义模型 Guarded 属性

guardedfillable 相反,是作为「黑名单」而不是「白名单」:

class User extends Model {
    protected $guarded = ['id', 'password'];
}

注意: 使用 guarded 时, Input::get() 或任何用户可以控制的未过滤数据,永远不应该传入 save 或 update 方法,因为没有在「黑名单」内的字段可能被更新。

阻挡所有属性被批量赋值

上面的例子中, id 和 password 属性不会被批量赋值,而所有其他的属性则允许批量赋值。您也可以使用 guard 属性阻止所有属性被批量赋值:

protected $guarded = ['*'];
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号