从请求中删除字段仍然无法验证

时间:2018-04-26 04:39:25

标签: php laravel validation laravel-5.2

我有一个在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请求,则配方会通过验证并成功创建。

0 个答案:

没有答案