在表单请求类中,我使用这样的方法来验证输入数据。
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中使用?
P.S。我知道$request->only(['field1', 'field2', 'field3'])
方式,但是如果我想限制SignupRequest extends FormRequest
中的字段。因为如果我在代码中多次使用$request->only([...])
,我将不得不在以后几次更改它。我想把它放在一个地方。
答案 0 :(得分:2)
您不需要对请求执行此操作。
一种选择是做一些事情:
$user = $request->input('user', []);
$data = array_only($user, ['email', 'domain_name', 'password', 'username']);
或者你甚至可以内联它:
$data = array_only($request->input('user', []), ['email', 'domain_name', 'password', 'username']);
希望这有帮助!
答案 1 :(得分:1)
FormRequest旨在验证您的请求数据,而不是控制它们。您可以随时提取所需的输入。
$data = $request->only(['user.name', 'user.password']);
编辑:根据您的评论,您可以执行以下操作。这允许您将所有字段名称存储在单个请求中,以使它们井井有条并且更易于更新。
将此添加到您的SignupRequest
public function loginData()
{
return array_only($this->input('user', []), ['username', 'password']);
}
在控制器中使用它
$request->loginData();
return $this->response($this->userService->create($request->loginData(), false), 201);