Skip to content

Commit d18f1aa

Browse files
authored
Merge pull request #118 from NikhiltGhalme/fix/debugbar-facade-compat
fix: resolve Debugbar facade at runtime to support Barryvdh and Fruitcake implementations
2 parents 0f2b166 + cd769fb commit d18f1aa

1 file changed

Lines changed: 34 additions & 11 deletions

File tree

src/Outputs/Debugbar.php

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,10 @@
22

33
namespace BeyondCode\QueryDetector\Outputs;
44

5+
use DebugBar\DataCollector\MessagesCollector;
56
use Illuminate\Support\Collection;
67
use Symfony\Component\HttpFoundation\Response;
78

8-
use Barryvdh\Debugbar\Facade as LaravelDebugbarV3;
9-
use DebugBar\DataCollector\MessagesCollector;
10-
use Fruitcake\LaravelDebugbar\Facades\Debugbar as LaravelDebugbar;
11-
129
class Debugbar implements Output
1310
{
1411
protected $collector;
@@ -17,26 +14,52 @@ public function boot()
1714
{
1815
$this->collector = new MessagesCollector('N+1 Queries');
1916

20-
if (class_exists(\Fruitcake\LaravelDebugbar\Facades\Debugbar::class)) {
21-
if (!LaravelDebugbar::hasCollector($this->collector->getName())) {
22-
LaravelDebugbar::addCollector($this->collector);
23-
}
17+
$facade = $this->resolveDebugbarFacade();
18+
19+
if ($facade === null) {
2420
return;
2521
}
2622

27-
if (!LaravelDebugbarV3::hasCollector($this->collector->getName())) {
28-
LaravelDebugbarV3::addCollector($this->collector);
23+
if (! $facade::hasCollector($this->collector->getName())) {
24+
$facade::addCollector($this->collector);
2925
}
3026
}
3127

3228
public function output(Collection $detectedQueries, Response $response)
3329
{
3430
foreach ($detectedQueries as $detectedQuery) {
35-
$this->collector->addMessage(sprintf('Model: %s => Relation: %s - You should add `with(%s)` to eager-load this relation.',
31+
$this->collector->addMessage(sprintf(
32+
'Model: %s => Relation: %s - You should add `with(%s)` to eager-load this relation.',
3633
$detectedQuery['model'],
3734
$detectedQuery['relation'],
3835
$detectedQuery['relation']
3936
));
4037
}
4138
}
39+
40+
/**
41+
* Resolve the installed Debugbar facade at runtime.
42+
*
43+
* Supports barryvdh/laravel-debugbar (v3 and v4+) and
44+
* fruitcake/laravel-debugbar. Returns the first class
45+
* that the autoloader can locate, or null if none exist.
46+
*
47+
* @return string|null
48+
*/
49+
protected function resolveDebugbarFacade()
50+
{
51+
$candidates = [
52+
'Barryvdh\Debugbar\Facades\Debugbar',
53+
'Barryvdh\Debugbar\Facade',
54+
'Fruitcake\LaravelDebugbar\Facades\Debugbar',
55+
];
56+
57+
foreach ($candidates as $candidate) {
58+
if (class_exists($candidate)) {
59+
return $candidate;
60+
}
61+
}
62+
63+
return null;
64+
}
4265
}

0 commit comments

Comments
 (0)