Laravelの「Fillable」と「Guarded」の違いって?-DEVコミュニティ
Laravelでは、$fillable
と$guarded
は 属性の大量割り当て を制御するためにEloquentモデルで使われる属性です。
Laravelにおける 大量割り当て とは、データの配列を使って、モデルの複数の属性を一度に設定する能力のことです。
Fillable :
$fillable
は、大量割り当てが可能な属性を指定する配列です。これらは create や update メソッドを使用してセットできる属性です。
fillableの配列に含まれていない属性は、大量割り当て時に無視されます。
class YourModele extends Model
{
protected $fillable = [
'name',
'email',
'password',
];
}
この例では$name
, $email
, $password
が大量割り当てされます。
もしモデルの全ての属性を大量割り当て可能にしたい場合、$fillable
宣言でワイルドカードの*を使うことができます。しかし、この方法のセキュリティ上の意味を理解することが重要です。
class YourModele extends Model
{
protected $fillable = ['*'];
}
Guarded :
$guarded
も配列ですが、逆の働きをします。大量割り当てが許されない属性を指定します。guarded配列に含まれていない属性は、大量割り当てに安全とみなされます。
class YourModele extends Model
{
protected $guarded = [
'name',
'email',
'password',
];
}
この例では、
$name, $email, $password
が大量割り当てされません。
モデルの全ての属性を大量割り当てしたくない場合、$guarded
宣言でワイルドカードの*を使うことができます。
class YourModele extends Model
{
protected $guarded = ['*'];
}
主な違い
$fillable
と$guarded
の 主な違い は、大量割り当て可能な属性を定義するアプローチです。$fillable
は許可された属性を明示的に述べ、$guarded
は許可されない属性を明示的に述べます。
$fillable
や$guarded
を使うことの重要性
$fillable
や$guarded
を使うことが重要なのは、大量割り当ての脆弱性に対する保護のためであり、セキュリティリスクにつながる可能性があるからです。許可されるか、または許可されない属性を指定することで、モデルに割り当てられるデータをよりコントロールできます。
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/kepsondiaz/fillable-guarded-in-laravel-whats-the-difference-589j