ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
在建立一个新的模型时,您把属性以数组的方式传入模型的构造方法,这些属性值会经由批量赋值存成模型数据。这一点非常方便,然而,若盲目地将用户输入存到模型时,可能会造成严重的安全隐患。如果盲目的存入用户输入,用户可以随意的修改任何以及所有模型的属性。基于这个理由,所有的 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 = ['*']; ~~~