Laravel, как получить экземпляр контроллера или имя_класса в handle() внутри AppExceptionsHandler.php

#laravel #exception #exception-handling #controller #httpexception

#laravel #исключение #обработка исключений #контроллер #httpexception

Вопрос:

Я огляделся и, похоже, не нашел ответа или обсуждения по этому поводу.

Возможно ли получить экземпляр исходного контроллера внутри метода «handle ()» в AppExceptionsHandler.php ?

Я хотел бы знать, как это сделать, чтобы узнать, с какого контроллера произошло исключение.

Спасибо!

Комментарии:

1. Он хранится в IlluminateRoutingRoute экземпляре, но он защищен, и для него нет определенного средства получения. :/

2. Теперь, когда я использую Laravel довольно глубоко, обратите внимание, что есть много вещей, которые довольно негибки. 🙁 CodeIgniter раньше мог копать очень глубоко и делать много интересных вещей.

3. есть ли какие-либо изменения в этом?

Ответ №1:

У вас есть $e->getTrace() , который возвращает трассировку стека объекта исключения. Но все же вы не знаете, в каком индексе находится ваш контроллер, если вы не выполняете фиктивный поиск для него:

 foreach ($e.getTrace() as $traceElement) {
   if (preg_match('/path/to/your/Http/Controllers/(.*?)Controller/', $traceElement['class'])) {
         $controllerClass = traceElement['class'];
         $contrllerObject = new $controllerClass();
   }
}
  

Комментарии:

1. Спасибо за ответ. Звучит как довольно хакерский подход. Возможно, сначала захочется посмотреть, есть ли какие-либо альтернативы, хотя я ценю ответ.