1
1
<?php namespace Barryvdh \Debugbar \Middleware ;
2
2
3
3
use Closure ;
4
+ use Exception ;
5
+ use Illuminate \Http \Request ;
4
6
use Barryvdh \Debugbar \LaravelDebugbar ;
7
+ use Illuminate \Contracts \Container \Container ;
8
+ use Illuminate \Contracts \Debug \ExceptionHandler ;
5
9
6
- class Debugbar {
10
+ class Debugbar
11
+ {
12
+ /**
13
+ * The App container
14
+ *
15
+ * @var Container
16
+ */
17
+ protected $ container ;
7
18
8
19
/**
9
- * The Exception Handler
20
+ * The DebugBar instance
10
21
*
11
22
* @var LaravelDebugbar
12
23
*/
@@ -15,27 +26,58 @@ class Debugbar {
15
26
/**
16
27
* Create a new middleware instance.
17
28
*
29
+ * @param Container $container
18
30
* @param LaravelDebugbar $debugbar
19
31
*/
20
- public function __construct (LaravelDebugbar $ debugbar )
32
+ public function __construct (Container $ container , LaravelDebugbar $ debugbar )
21
33
{
34
+ $ this ->container = $ container ;
22
35
$ this ->debugbar = $ debugbar ;
23
36
}
24
37
25
38
/**
26
39
* Handle an incoming request.
27
40
*
28
- * @param \Illuminate\Http\ Request $request
29
- * @param \ Closure $next
41
+ * @param Request $request
42
+ * @param Closure $next
30
43
* @return mixed
31
44
*/
32
45
public function handle ($ request , Closure $ next )
33
46
{
34
- $ response = $ next ($ request );
47
+ try {
48
+ /** @var \Illuminate\Http\Response $response */
49
+ $ response = $ next ($ request );
50
+ } catch (Exception $ e ) {
51
+ $ response = $ this ->handleException ($ request , $ e );
52
+ }
35
53
54
+ // Modify the response to add the Debugbar
36
55
$ this ->debugbar ->modifyResponse ($ request , $ response );
37
56
38
57
return $ response ;
39
58
40
59
}
60
+
61
+ /**
62
+ * Handle the given exception.
63
+ *
64
+ * (Copy from Illuminate\Routing\Pipeline by Taylor Otwell)
65
+ *
66
+ * @param $passable
67
+ * @param Exception $e
68
+ * @return mixed
69
+ * @throws Exception
70
+ */
71
+ protected function handleException ($ passable , Exception $ e )
72
+ {
73
+ if (! $ this ->container ->bound (ExceptionHandler::class) || ! $ passable instanceof Request) {
74
+ throw $ e ;
75
+ }
76
+
77
+ $ handler = $ this ->container ->make (ExceptionHandler::class);
78
+
79
+ $ handler ->report ($ e );
80
+
81
+ return $ handler ->render ($ passable , $ e );
82
+ }
41
83
}
0 commit comments