#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. Спасибо за ответ. Звучит как довольно хакерский подход. Возможно, сначала захочется посмотреть, есть ли какие-либо альтернативы, хотя я ценю ответ.