У меня есть проект, работающий на 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
, то рецепт пройдет проверку и будет успешно создан.