У меня есть класс Laravel FormRequest, который должен проверять две строки запроса JSON (вложенные объекты и массивы) на маршруте GET в моем JSON Rest API. Я беру строки запроса json, декодирую их в объекты php и сохраняю во время подготовки к проверке запроса на проверку.
По какой-то причине это не работает должным образом. Проверка json сортировщиков работает, как и проверка sorters_decoded для «обязательных» и «массивов». Проверка элемента массива и все, что после нее, похоже, не работает, поскольку я достигаю функции контроллера, даже если отправлены неверные данные. Коллекция входных пакетов запроса по запросу изменяется (недопустимым данным присваивается значение null), но ответ проверки 422 не генерируется. Возможно, вы видите что-то не так в этом коде?
Оба параметра отправляются в виде строк запроса json, и этап декодирования работает, поэтому это не связано с декодированием/кодированием URL-адреса.
Я пытался изменить элемент массива sorters.*.name проверка от строки к целому числу, и когда я отправил некоторые данные, такие как [{'name':'a'}], проверка 'integer' изменила данные в $response->query->sorters_decoded на [{'name':null }]. Но ответа об ошибке проверки 422 не последовало.
У меня есть класс Laravel FormRequest, который должен проверять две строки запроса JSON (вложенные объекты и массивы) на маршруте GET в моем JSON Rest API. Я беру строки запроса json, декодирую их в объекты php и сохраняю во время подготовки к проверке запроса на проверку. По какой-то причине это не работает должным образом. Проверка json сортировщиков работает, как и проверка sorters_decoded для «обязательных» и «массивов». Проверка элемента массива и все, что после нее, похоже, не работает, поскольку я достигаю функции контроллера, даже если отправлены неверные данные. Коллекция входных пакетов запроса по запросу изменяется (недопустимым данным присваивается значение null), но ответ проверки 422 не генерируется. Возможно, вы видите что-то не так в этом коде? [code]class RecipeFindRequest extends FormRequest {
$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'], ]; } } [/code] Оба параметра отправляются в виде строк запроса json, и этап декодирования работает, поэтому это не связано с декодированием/кодированием URL-адреса. [img]https://i.sstatic.net/5beZr.png[/img]
Я пытался изменить элемент массива sorters.*.name проверка от строки к целому числу, и когда я отправил некоторые данные, такие как [{'name':'a'}], проверка 'integer' изменила данные в $response->query->sorters_decoded на [{'name':null }]. Но ответа об ошибке проверки 422 не последовало.