📜  laravel 允许所有可填充 - PHP (1)

📅  最后修改于: 2023-12-03 15:02:36.290000             🧑  作者: Mango

Laravel 允许所有可填充

在 Laravel 框架中,我们可以使用 Eloquent 模型来执行数据库操作。其中,填充(Filling)操作是指将数据数组填充到模型中的属性上,然后将这些属性持久化到数据库中。Laravel 允许所有可填充,这意味着我们可以让所有的属性都可被填充,而不必显式地指定哪些属性可以被填充。

允许所有可填充的方式

Laravel 允许所有可填充的方法非常简单,我们只需要在模型中添加 $guarded 属性即可。例如:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $guarded = [];
}

在这个例子中,我们定义了一个 User 模型,并将 $guarded 属性设置为空数组。这意味着,所有的属性都可以被填充并写入到数据库中。

$guarded$fillable 的区别

除了 $guarded 属性外,我们还可以使用 $fillable 属性来指定可填充的属性。这两个属性的区别在于:

  • $fillable 属性用于指定可被填充的属性名称列表。
  • $guarded 属性用于指定不可被填充的属性名称列表。如果 $guarded 属性为空数组,则所有的属性都可以被填充。

这里我们需要注意一点,即这两个属性不能同时在同一个模型中使用。如果你在一个模型中同时定义了 $fillable$guarded 属性,则会抛出 MassAssignmentException 异常。

防止过度填充

虽然 Laravel 允许所有可填充,但我们依然需要注意安全性。特别是在处理用户提交的表单数据时,我们需要避免过度填充(Overfilling)现象的发生。过度填充发生时,黑客可以通过提交恶意数据来覆盖掉我们不希望被覆盖的属性。

为了避免过度填充的发生,我们可以使用模型中的 $fillable 属性。在 $fillable 属性中,我们只需要填写我们允许用户填写的属性名称即可。例如:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

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

在这个例子中,我们指定了 nameemailpassword 三个属性可以被填充。如果用户在表单中提交了其他多余的属性,则不会被写入到数据库中。

总结

在 Laravel 框架中,我们可以使用 $guarded 属性来允许所有可填充。这样做非常方便,但也需要注意安全性。我们还可以使用 $fillable 属性来指定可被填充的属性名称列表。这两个属性不能同时在同一个模型中使用。为了防止过度填充的发生,我们应该在 $fillable 属性中仅填写允许用户填写的属性名称。