【发布时间】:2021-12-30 18:35:54
【问题描述】:
我第一次在我负责维护的遗留应用程序中使用 Laravel (5.4) 和 PHP,在过去的几个月里,我注意到了一个痛点,那就是批量分配.
我相信我对“是什么”有足够的了解,但我不确定我是否真正正确地利用了它。 The official documentation 使用用户角色的(好的,但极端的)示例来说明问题。我理解这一点的重要性以及为什么我应该保护这些变量。但是,总的来说,我认为我对确定要保护或不保护哪些字段(如果有的话)并没有真正的了解。
似乎 Laravel 的许多不错的功能似乎并没有考虑到质量分配,这是我感到沮丧的主要原因。例如,如果我有一个包含一些可选字段的端点(即您不能在请求中指定它们),那么执行 mymodel->update(request->all()) 只会更新您提供的字段。如果许多字段都受到保护,如果我想实现相同的行为,我将不得不进行多次重复的 isset() 检查,这似乎是不必要的。 我也知道request->all()真的不应该这样用,但我只是想说明一点。
当您考虑到您可能会使用强大的验证以及 request->only([...]) 之类的东西来确保您的数据正确并仅过滤到您期望的内容时,这会变得更加麻烦。
所以最终我要问的是:
在存在强大的验证和输入整形方法的情况下,质量分配几乎还有什么值得做的吗?总的来说,当我的验证步骤似乎已经解决了这个问题时,我似乎无缘无故地跳过了这么多圈。 如果它仍然值得做,我错过了什么?批量分配保护是否应该只委托给超级重要的领域,比如用户的角色,而不是其他?
【问题讨论】:
-
如果您使用正确的验证,您可能有一个
$rules数组。我总是根据这个数组中的键更新我的所有字段。这意味着我接受:$request->only(array_keys($rules)),我总是只更新经过验证的字段(而不是来自请求的一些随机参数)。正如你所说,我只会保护极其重要的属性,比如用户角色、ID、密码,也许是某种支付信息或令牌。 -
一个好问题要问:+1