【发布时间】:2017-05-23 18:08:35
【问题描述】:
在表单请求类中,我使用这样的方法来验证输入数据。
class SignupRequest extends FormRequest
{
...
public function rules()
{
return [
'user.email' => 'required_with:user|email',
'user.domain_name' => 'required_with:user|string',
'user.password' => 'required_with:user|string|min:8',
'user.username' => 'required_with:user',
];
}
...
}
稍后在控制器中我使用类似的东西
$data = $request->get('user', []);
return $this->response($this->userService->create($data, false), 201);
我想以某种方式写入我的 SignupRequest 应该允许传递哪些字段。因此,当后来我收到$data = $request->get('user', []); 时,我确信其中只有允许的字段。
这可能在 FormRequest 中吗?
附:我知道$request->only(['field1', 'field2', 'field3']) 的方式,但是如果我想限制SignupRequest extends FormRequest 中的字段。因为如果我在我的代码中多次使用$request->only([...]),我将不得不多次更改它。我想把它放在一个地方。
【问题讨论】:
-
你总是可以做 $request->only(['field1', 'field2', 'field3']) 这将只返回一个指定请求参数的数组。
-
永远不要相信来自表单的字段,您需要始终剥离或验证它,因为@Yasen Slavov 说您只能请求特定字段,如果您请求所需数据并存储在新数组中,然后创建用户。
-
laravel.com/docs/5.4/requests#retrieving-input 向下滚动到“检索输入数据的一部分” - 仅使用/除外来检索您真正想要的数据(输入数据的子集)。
-
$request->only(['field1', 'field2', 'field3'])变体有效,但如果我在多个地方使用请求,我需要一次又一次地列出这些字段。以后如果我想更改字段列表,我必须在几个地方执行此操作。这就是为什么我在SignupRequest extends FormRequest中询问如何执行此操作以将登录信息保存在一个地方。 -
您可以在 SignupRequest 类中添加一个方法,例如 SignupRequest->getSubsetParams() 返回所需字段的数组,然后您可以使用 $request->getSubsetParams()使用该请求的控制器方法。