我有一个在Laravel 5.2上运行的项目,它有一个API。
我被要求在API中为API做出规定,以便修复"请求是否会失败验证。
当POST
请求的查询字符串值为fix=true
时,如果请求知道如何解决,则API应该修复该请求。
例如,我的API接受POST
请求来创建配方,其中一个字段为recipe_style_id
。
如果为recipe_style_id
提供了无效值且查询字符串包含fix=true
,那么我应该从请求中删除该字段,以便在没有该字段的情况下对其进行评估。
我选择在表单请求中执行此操作:
public function rules()
{
if ($this->input('fix')) $this->fixRecipe();
dd($this->all());
return [
//other validation rules...
'recipe_style_id' => 'nullable|exists:recipe_styles,sub_category_id',
];
}
protected function fixRecipe()
{
$input = $this->all();
if (isset($input["recipe_style_id"]) && $this->isInvalidRecipeStyleId($input["recipe_style_id"])) {
$input = array_except($input, 'recipe_style_id');
}
$this->replace($input);
}
protected function isInvalidRecipeStyleId($recipe_style_id)
{
return !RecipeStyle::where('sub_category_id', $recipe_style_id)->exists();
}
这似乎有效,如果提供了无效的recipe_style_id
,那么当我查看dd()
的结果时,我在请求中没有看到该字段 - 但是如果我删除{{1} }语句,它仍然无法在该字段上进行验证。
dd()
验证规则在Laravel 5.2中不存在,因此我已将其添加到我的nullable
中:
AppServiceProvider
请求中的字段不再存在,为什么这仍然无法验证?
值得注意的是,如果我在没有Validator::extend('nullable', function($attribute, $value, $parameters, $validator) {
return true;
});
的情况下发送POST
请求,则配方会通过验证并成功创建。