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

问题描述 投票:0回答:1

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

我有一个 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 请求,后面跟着一个上传请求等。但我不确定我是否只是想证明这一点我自己。

任何帮助将不胜感激。

谢谢!

php laravel forms validation request
1个回答
1
投票

您可以拥有一个

ApiRequest
类来验证所有端点的所有强制参数。

class ApiRequests extends FormRequest
{

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

}

假设您的 API 有一个可以编辑用户个人资料的端点。并且向该端点发出的请求必须包括

first_name
last_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...
}
© www.soinside.com 2019 - 2024. All rights reserved.