批量賦值

2018-02-24 15:52 更新

在建立一個(gè)新的模型時(shí),您把屬性以數(shù)組的方式傳入模型的構(gòu)造方法,這些屬性值會(huì)經(jīng)由批量賦值存成模型數(shù)據(jù)。這一點(diǎn)非常方便,然而,若盲目地將用戶輸入存到模型時(shí),可能會(huì)造成嚴(yán)重的安全隱患。如果盲目的存入用戶輸入,用戶可以隨意的修改任何以及所有模型的屬性。基于這個(gè)理由,所有的 Eloquent 模型默認(rèn)會(huì)阻止批量賦值 。

我們以在模型里設(shè)定 fillableguarded 屬性作為開始。

定義模型 Fillable 屬性

fillable 屬性指定了哪些字段支持批量賦值 。可以設(shè)定在類的屬性里或是實(shí)例化后設(shè)定。

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

在上面的例子里,只有三個(gè)屬性允許批量賦值。

定義模型 Guarded 屬性

guardedfillable 相反,是作為「黑名單」而不是「白名單」:

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

注意: 使用 guarded 時(shí), Input::get() 或任何用戶可以控制的未過濾數(shù)據(jù),永遠(yuǎn)不應(yīng)該傳入 save 或 update 方法,因?yàn)闆]有在「黑名單」內(nèi)的字段可能被更新。

阻擋所有屬性被批量賦值

上面的例子中, id 和 password 屬性不會(huì)被批量賦值,而所有其他的屬性則允許批量賦值。您也可以使用 guard 屬性阻止所有屬性被批量賦值:

protected $guarded = ['*'];
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)