Laravel - 我可以在FormRequest中注入FormRequest吗?

时间:2017-04-07 16:04:41

标签: forms laravel validation request

我有一套复杂的规则,我是动态构建的,但理想情况下我需要在进入下一个规则之前验证一组规则,即

我有一个json对象{data: {}},在我继续验证嵌套在data中的字段以及其他嵌套字段等之前,我要检查它是否存在。

我想过有一个FormRequest课程,比如ApiRequest,可以验证data,然后是另一个,比如说UploadRequest,这会增加进一步的规则data已经过验证。

我可以这样做,并且通过在ApiRequest的构造函数中注入UploadRequest来实现它,它允许在ApiRequest中验证完整的规则集,然后再继续下一组:

/**
 * UploadRequest constructor.
 * @param ApiRequest $apiRequest
 */
public function __construct(ApiRequest $apiRequest) {

    // If we got here, ApiRequest passed validation, woo!

}

这看起来像是一种反模式还是“错误的”处理方法? 我试图想到一个请求由迷你请求组成,即通过api的上传请求实际上是一个api请求,然后是上传请求等。但我不确定我是否只是试图证明这一点自己。

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以拥有一个ApiRequest类来验证所有端点的所有必需参数。

class ApiRequests extends FormRequest
{

    public function rules()
    {
        return [
            'data' => 'required',
            'data.field_1' => 'required|string',
            'data.field_2' => 'required|string'
        ];
    }

}

我们假设您的API有一个端点可以编辑用户的个人资料。对该端点的请求必须包括first_namelast_name。因此,可以创建一个扩展ApiRequest的新类:

class EditUserRequest extends ClientRequest
{
    public function rules()
    {
        return array_merge(parent::rules(), [
            'params.first_name' => 'required',
            'params.last_name' => 'required',
        ]);
    }
}

这会将ApiRequest中的所有规则与EditUserRequest所需的规则合并。

然后在你的控制器中(例如UsersController):

public function update(EditUserRequest $request) {
    .... your code goes here...
}