Избегайте перенаправления Laravel после проверки - PullRequest
4 голосов
/ 13 июля 2020

Я делаю простую проверку на своем контроллере Laravel:

public function updateInfo(Request $request) {

        $validator = $request->validate([
            "name" => ["string", "nullable"],
            "email" => ["email", "nullable"],
            "currentPassword" => ["password:api"]
        ]);

        return json_encode($validator);
}

Моя проблема в том, что эта проверка перенаправляет меня домой в случае сбоя, и я делаю запрос через AJAX, я знаю, что Laravel определяет, когда запрос отправляется через Ajax, но он работает, только если это обычный запрос (типичный запрос, в котором я отправляю заголовки с Content Type application/json, а в теле я отправляю обычный JSON

Но Laravel не может обнаружить, когда запрос te Ajax не соответствует Content Type application/json, я использую объект FormData() из JavaScript, поэтому я не отправил заголовок Content Type application/json, а в теле я отправил объект FormData.

Я думаю, что он имитирует типичный HTTP-запрос, перезагружающий страницу, и по этой причине Laravel не может его обнаружить, но это вызывает у меня проблемы с ответом ajax, потому что Laravel откликается на перенаправление, а в моем ответе Ajax я улавливаю HTML код домашней страницы.

Что я могу сделать?

1 Ответ

2 голосов
/ 13 июля 2020

Вы можете использовать вспомогательную функцию validator() с методом validate(), это поможет вам как с вызовами AJAX, так и с обычными вызовами

validator($request->all(), [
    "name" => ["string", "nullable"],
    "email" => ["email", "nullable"],
    "currentPassword" => ["password:api"]
])->validate();
...