Laravel FormRequest Validation for Rest API получает вызовы с двумя параметрами json запроса, которые не работают должныPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Laravel FormRequest Validation for Rest API получает вызовы с двумя параметрами json запроса, которые не работают должны

Сообщение Anonymous »

У меня есть класс Laravel FormRequest, который должен проверять две строки запроса JSON (вложенные объекты и массивы) на маршруте GET в моем JSON Rest API. Я беру строки запроса json, декодирую их в объекты php и сохраняю во время подготовки к проверке запроса на проверку.
По какой-то причине это не работает должным образом. Проверка json сортировщиков работает, как и проверка sorters_decoded для «обязательных» и «массивов». Проверка элемента массива и все, что после нее, похоже, не работает, поскольку я достигаю функции контроллера, даже если отправлены неверные данные. Коллекция входных пакетов запроса по запросу изменяется (недопустимым данным присваивается значение null), но ответ проверки 422 не генерируется. Возможно, вы видите что-то не так в этом коде?

Код: Выделить всё

class RecipeFindRequest extends FormRequest
{

protected function prepareForValidation(): void
{
try {
$sorters = null;
if ($this->query->has('sorters')) {
$sorters = json_decode($this->query->get('sorters'));
$this->merge([
'sorters_decoded' => $sorters,
]);
}

$filters = null;
if ($this->query->has('filters')) {
$filters = json_decode($this->query->get('filters'));
$this->merge([
'filters_decoded' => $filters,
]);
}

$this->merge([
'language' => $this->headers->get('language'),
]);
} catch(\Throwable $e) {
//die silently, fail response will get raised on validation time
}
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules(): array
{
return [
'sorters' => ['json'],
'sorters_decoded' => ['required', 'array'],
'sorters_decoded.*.name' => ['required', 'string', Rule::in(['likes', 'ratings', 'calories', 'carbs', 'protein', 'fat', 'created'])],
'sorters_decoded.*.direction' => ['required', 'string', Rule::in(['asc', 'desc'])],
'sorters_decoded.*.order' => ['required', 'integer'],
'filters' => ['json'],
'filters_decoded.duration_high' => ['integer', 'min:0'],
'filters_decoded.duration_low' => ['integer', 'min:0'],
'filters_decoded.title' => ['string'],
'filters_decoded.difficulty' => ['array'],
'filters_decoded.difficulty.*' => ['string', 'exists:difficulties,id'],
'filters_decoded.ingredients' => ['array'],
'filters_decoded.ingredients.*.id' => ['string', 'exists:ingredients,id'],
'filters_decoded.ingredients.*.relation' => ['string', Rule::in(['include', 'exclude'])],
'filters_decoded.liked_by_me' => ['boolean'],
'filters_decoded.cookbooks' => ['array'],
'filters_decoded.cookbooks.*' => ['string', 'exists:cookbooks,id'],
'filters_decoded.nutritions' => ['array'],
'filters_decoded.nutritions.*.category_id' => ['string', 'exists:nutrition_categories,id'],
'filters_decoded.nutritions.*.nutrition_high' => ['numeric', 'min:0'],
'filters_decoded.nutritions.*.nutrition_low' => ['numeric', 'min:0'],
'language' => ['string', 'size:2', 'exists:i18n_languages,short'],
'page' => ['integer', 'min:1'],
'per_page' => ['integer', 'min:1'],
];
}
}
Оба параметра отправляются в виде строк запроса json, и этап декодирования работает, поэтому это не связано с декодированием/кодированием URL-адреса.
Изображение

Я пытался изменить элемент массива sorters.*.name проверка от строки к целому числу, и когда я отправил некоторые данные, такие как [{'name':'a'}], проверка 'integer' изменила данные в $response->query->sorters_decoded на [{'name':null }]. Но ответа об ошибке проверки 422 не последовало.

Подробнее здесь: https://stackoverflow.com/questions/764 ... n-params-n
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»