Я не могу отображать сообщения об ошибках в лезвии после получения ошибки 422

Я новичок во всей концепции обработки исключений или ошибок в laravel. По сути, у меня есть запрос формы, который, когда правила не соблюдаются, показывает мне ошибку 422 в консоли, я хочу преобразовать это в сообщение об ошибке в лезвии, но мне это не удается.

Я уже пробовал это в Exception/Handle.php

public function render($request, Exception $exception)
    {
        return redirect()->back()->with('error', 'Invalid data');
//        return parent::render($request, $exception);
    }

Мое сообщение об ошибке в лезвии должно работать с этим:

@if(Session::has('error'))
    <div class="alert alert-error">
        {{ Session::get('error') }}
        @php
            Session::forget('error');
        @endphp
    </div>
@endif

Я знаю, что я должен проверить коды ошибок или экземпляры перед возвратом, но я просто хочу, чтобы это работало. Я ничего не могу вернуть (вообще никакого ответа). Один думает, что работает return parent::render($request, $exception);, и он выдает сообщение об ошибке в консоли.

Подробнее

Не знаю, поможет ли, но запрос делается из приложения Vue к контроллеру, который принимает в качестве параметра FormRequest.

Также я не могу проверить код ошибки, я пытался

    public function render($request, Exception $exception)
    {
        if ($exception->getCode() === 422) {
            return response([], 356); //should throw 356 error
        }
        return parent::render($request, $exception); // instead this return fires and gives me 422 error
    }

Компонент Vue

мой шаблон:

<template>
    <form class="form" @submit.prevent="submit()">
        <input type="text" class="form-control-plaintext textField"
               placeholder="Post a comment" required v-model="textField">
        <button :disabled="disabled" class="btn btn-success submit" type="submit">Post</button>
        <button :disabled="disabled" class="btn btn-dark submit" type="reset">Cancel</button>
    </form>
</template>

мой метод аксиом:

                    axios
                        .post('/comments', {
                            textField: this.textField,
                            id: this.id,
                            routeName: this.routename,
                        })
                        .then(response => {
                            this.name = '';
                            this.callReload(this.id);
                            this.textField = '';
                        })
                        .catch(function (error) {
                            console.log(error)
                        });

person Lizard Derad    schedule 09.11.2019    source источник
comment
Отвечает ли это на ваш вопрос? Laravel Redirect Back with() Message   -  person Peppermintology    schedule 09.11.2019
comment
Я пробовал каждое решение в вашем ответе без везения, проблема, вероятно, не в синтаксисе, а в подходе, я могу войти в консоль для любого кода ошибки, такого как return response([], 389);, но не могу перенаправить или сделать ответ в формате json   -  person Lizard Derad    schedule 10.11.2019
comment
Можете ли вы предоставить код для вашего компонента vue.   -  person Peppermintology    schedule 10.11.2019
comment
Конечно, компонент выполняет свою работу без ошибок, если соблюдаются правила запроса формы.   -  person Lizard Derad    schedule 10.11.2019


Ответы (1)


Возможно, вы захотите изменить функцию render, которая, как я полагаю, вместо App\Exceptions\Handler.php возвращает JSON для исключений, когда запрос был сделан через JSON.

public function render($request, $exception)
{
  if ($request->isJson()) {
    return response()->json(['error' => 'Error Detail'], 422);
  }
}

Вы также захотите проверить тип exception, а не просто возвращать код состояния 422 для любого исключения JSON.

person Peppermintology    schedule 09.11.2019
comment
Но на самом деле мне пришлось сделать return response()->json(['error' => 'Error Detail'], 200);, чтобы получить доступ к сообщению, статус 422 просто выдает ошибку. - person Lizard Derad; 10.11.2019
comment
Также я намеревался отобразить сообщение об ошибке в лезвии, поэтому перенаправление не сработало, мне действительно пришлось обрабатывать их в Vue. - person Lizard Derad; 10.11.2019