Исключения не будут делать Laravel 5.7 - PullRequest
0 голосов
/ 11 декабря 2018

Я использую Laravel v 5.7.15.

Я написал помощник по проверке, который проверяет запрос API - это успешно работает, и до этого я использовал try / catch для его окружения.

Я перешел к обработке исключения в обработчике, однако не могу запустить функцию render - она ​​переходит прямо в «report» и выдает исключение в моей консоли tinker.

Обработчик: (полный класс в соответствии с запросом)

<?php

namespace App\Exceptions;

use Illuminate\Validation\ValidationException;
use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use App\Log;

class Handler extends ExceptionHandler
{
/**
 * A list of the exception types that are not reported.
 *
 * @var array
 */
protected $dontReport = [
    //
];

/**
 * A list of the inputs that are never flashed for validation exceptions.
 *
 * @var array
 */
protected $dontFlash = [
    'password',
    'password_confirmation',
];

/**
 * @param Exception $exception
 * @return mixed|void
 * @throws Exception
 */
public function report(Exception $exception)
{
    parent::report($exception);
}

/**
 * Render an exception into an HTTP response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Exception  $exception
 * @return \Illuminate\Http\Response
 */
public function render($request, Exception $exception)
{
    dd($exception);
    $log = new Log();
    $log->status = 2;

    // Validate API incoming data
    if ($exception instanceOf ValidationException) {

        foreach ($exception->errors() as $error) {
            // collect multiple validation errors
            $message[] = implode('', $error);
        }

        $message = implode('', $message);

        $log->message = $message;
        $log->save();

        $response = [
            'message' => $message,
            'status' => 400,
        ];
    } else {
        $response = [
            'message' => $exception->getMessage(),
            'status' => '500',
        ];
    }

    return parent::render($request, $exception);
}
}

Это не удается умереть и сбросить, однако я могу использовать dd в функции отчета, и это прекрасно работает.Остальная часть этого файла осталась нетронутой, за исключением включений в верхней части файла.

Вот как я называю свой валидатор в моем контроллере:

$this->validate($request, BlueparkValidatorArrays::$getOrders);

Если бы кто-нибудь мог указать мне правильное направление, я был бы очень признателен.

1 Ответ

0 голосов
/ 06 февраля 2019

Это может быть вызвано проблемой в конфигурации вашего журнала.

При вызове parent::report($exception); из исходного кода laravel выполняется следующее:

public function report(Exception $e)
{
    ...

    try {
        $logger = $this->container->make(LoggerInterface::class);
    } catch (Exception $ex) {
        throw $e; // throw the original exception
    }

    ...
}

Примечание throw $e неthrow $ex.Поэтому, если создание реализации регистратора завершается неудачно, исходное исключение, которое обрабатывалось, было брошено .

Чтобы проверить это, закомментируйте parent::report($exception); в функции отчета и посмотрите, является ли render()вызван, как и ожидалось.

Если это так, ваша конфигурация журнала не работает.Убедитесь, что у вас есть правильные разрешения для вашего местоположения журнала и что ваш .env файл не переопределяет какие-либо настройки ведения журналов laravel.См. Как отладить ошибку 500 Laravel без логов, без информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...