【问题标题】:Laravel, how to get controller instance or classname in handle() inside App\Exceptions\Handler.phpLaravel,如何在 App\Exceptions\Handler.php 中的 handle() 中获取控制器实例或类名
【发布时间】:2016-10-09 17:43:02
【问题描述】:

我环顾四周,似乎没有找到关于此的答案或讨论。

是否可以在App\Exceptions\Handler.php中的“handle()”方法中获取原始控制器的实例?

我想知道如何做到这一点,以便知道异常发生在哪个控制器。

谢谢!

【问题讨论】:

  • 它存储在Illuminate\Routing\Route 实例上,但它受到保护,并且没有为它定义的getter。 ://
  • 现在我已经非常深入地使用 Laravel,请注意有很多东西非常不灵活。 :-( CodeIgniter 曾经能够深入挖掘并做很多很酷的事情。

标签: laravel exception exception-handling controller httpexception


【解决方案1】:

您有一个 $e->getTrace(),它返回异常对象的堆栈跟踪。 但是您仍然不知道您的控制器位于哪个索引中,除非您对它进行 dummy 搜索:

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

【讨论】:

  • 感谢您的回答。听起来像一个非常hacky的方法。可能想先看看是否有其他选择,尽管我很欣赏答案。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
相关资源
最近更新 更多