Laravel - 将FormRequest限制为某些参数

时间:2017-05-23 06:59:58

标签: php laravel

在表单请求类中,我使用这样的方法来验证输入数据。

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([...]),我将不得不在以后几次更改它。我想把它放在一个地方。

2 个答案:

答案 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);