Удаление поля из запроса все еще не проходит проверку - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть проект, работающий на 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() Я не вижу это поле в запросе - однако, если я удаляю оператор dd(), он все равно не проходит проверку в этом поле.

The nullable Правило проверки не былоxist в Laravel 5.2, и поэтому я добавил его в свой AppServiceProvider:

Validator::extend('nullable', function($attribute, $value, $parameters, $validator) {
    return true;
});

Если в запросе больше нет поля, почему проверка по-прежнему не проходит?

Стоитотмечая, что если я отправлю запрос POST без recipe_style_id, то рецепт пройдет проверку и будет успешно создан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...