我有一套复杂的规则,我是动态构建的,但理想情况下我需要在进入下一个规则之前验证一组规则,即
我有一个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请求,然后是上传请求等。但我不确定我是否只是试图证明这一点自己。
非常感谢任何帮助。
谢谢!
答案 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_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...
}