Остановить Laravel 9 от перенаправления, если проверка AJAX не удалась

У меня есть приложение Laravel 9, и я использую Vue 3 и Filepond для создания возможности загрузки изображений.

<template>
    <file-pond
        max-files = "1"
        name = "images"
        server = "/api/images"
        accepted-file-types = "image/jpeg, image/png, image/gif, image/webp"
        :files = "file"
    />
</template>

<script setup>
import vueFilePond from 'vue-filepond'
import 'filepond/dist/filepond.min.css'

const file = ''

</script>

Это очень просто, он в основном отправляет загруженный файл на сервер в конечной точке API в «/api/images», которая является конечной точкой API моего приложения Laravel, и она работает, как и ожидалось.

Однако, когда я пытаюсь проверить запрос в контроллере Laravel, я всегда получаю ответ перенаправления 302 обратно в свое приложение Vue 3. Вот как выглядит мой валидатор:

public function upload(Request $request)
{
    $request->validate(
        [
            'image' => 'required|image|dimensions:min_width=1,max_height=1|max:4000',
        ]
    );

    if ($request->fails())
    {
        dd('Request failed. App should stop here.');
    }
}

Я намеренно установил «max_height» в 1, чтобы проверка не прошла, для тестирования. Однако приложение не переходит к «Запрос не выполнен…», оно просто перенаправляет (302) пользователя вместо того, чтобы возвращать ошибки.

Я предполагаю, что Laravel по какой-то причине не распознает это как запрос AJAX. Потому что эти проверки запроса всегда работают идеально, если я отправлю простую форму Vue Axios. Я всегда получаю ошибки в формате JSON. Но здесь это не так.

Я пытался сделать это, и он успешно выдавал мне сообщение «Проверка не удалась»:

$validator = Validator::make($request->all(),
[
    'image' => 'required|image|dimensions:min_width=1,min_height=1|max:4000',
]);

if ($validator->fails())
{
    dd('Validator fails.');
}

Однако я хотел бы использовать здесь проверку формы запроса (чтобы я мог поместить содержимое логики проверки в свой файл spearate.)

Я хочу: когда проверка изображения не удалась -> Laravel должен вернуть ответ JSON со всеми ошибками. Точно так же, как когда проверка формы не удалась.

Хотя чего мне не хватает? Почему он не работает так, как должен в первой ситуации?

Вы можете использовать классы Form Request, внутри которых у вас есть метод failedValidation(), который вы можете использовать для перенаправления вызова.

StewieSWS 10.02.2023 15:17
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы в основном просто пропускаете заголовок accept = application/json

Этот заголовок является единственной реальной разницей между вызовом ajax и обычным запросом, независимо от того, содержит ли маршрут «api» или нет.

Поскольку запрос ожидает ответ в формате json, обработчик исключений не будет отправлять перенаправление, а вместо этого вернет json ошибки. хотя ответ об ошибке исключения проверки или любая ошибка исключения.

Отлично, именно то, чего мне не хватало! Теперь все работает идеально!

Radical_Activity 10.02.2023 16:37

Другие вопросы по теме