📅  最后修改于: 2023-12-03 15:23:12.209000             🧑  作者: Mango
在 Laravel 中,Guarded 是一个属性,它允许你定义不可被批量赋值的字段。Guarded 可以使你的应用程序更加安全,因为它可以防止用户提交数据中包含敏感字段。
默认情况下,在 Laravel 的 Eloquent 模型中,所有字段都是可被批量赋值的。这样一来,如果用户提交了包含敏感数据的表单,这些敏感数据就会被自动保存到数据库中,从而降低了应用程序的安全性。
为了防止这种情况的发生,你可以在 Eloquent 模型中定义 Guarded 属性:
class User extends Model
{
protected $guarded = ['id', 'password'];
}
在这个例子中,我们定义了一个 User 模型,并将其 $guarded 属性设置为一个包含 id 和 password 字段的数组。这意味着这些字段不能被批量赋值。
现在,如果用户提交一个包含 id 和 password 字段的表单,这些字段就不会被保存到数据库中。
Fillable 和 Guarded 都是 Eloquent 模型的属性,它们都用于定义哪些字段可以被批量赋值。
但是它们之间还是有一些区别:
以下是一些 Guarded 常用的使用技巧:
如果你没有设置 $guarded 属性,那么所有的字段都会被自动设置为可被批量赋值。
通常情况下,你应该将主键字段设置为 $guarded 。因为如果一个用户提交了一个包含 id 字段的表单,那么这个用户就有可能恶意地修改或删除该记录。
当你想禁用所有的批量赋值时,你可以将 $guarded 属性设置为空数组:
class User extends Model
{
protected $guarded = [];
}
可以在控制器中为 Eloquent 模型设置 $guarded 属性:
class UserController extends Controller
{
public function store(Request $request)
{
$user = new User;
$user->fill($request->all())->save(); // 不受 Guarded 属性限制
$user->update($request->all()); // 受 Guarded 属性限制
}
}
在这个例子中,我们使用 fill 方法将 $request 对象中的所有字段设置为可被批量赋值。这种方式不受 Guarded 属性的限制。
但是,如果我们使用 update 方法,就会受到 Guarded 属性的限制。
Guarded 属性允许你指定哪些字段不能被批量赋值。这可以提高应用程序的安全性,因为它可以防止用户在表单中提交敏感数据。
通过掌握 Guarded 的使用技巧,你可以更好地保护你的应用程序,使其更加健壮和安全。