From 58c8f1ad07405629117a862b07bf91d527584eff Mon Sep 17 00:00:00 2001
From: Arman <407448+armanist@users.noreply.github.com>
Date: Mon, 6 Jul 2026 21:14:30 +0400
Subject: [PATCH 1/2] [#532] Fix debugger replay for array payloads
---
src/Debugger/Debugger.php | 2 +-
tests/Unit/Debugger/DebuggerTest.php | 29 +++++++++++++++++++++++++++-
2 files changed, 29 insertions(+), 2 deletions(-)
diff --git a/src/Debugger/Debugger.php b/src/Debugger/Debugger.php
index bdd0adc6..fb9837fd 100644
--- a/src/Debugger/Debugger.php
+++ b/src/Debugger/Debugger.php
@@ -174,7 +174,7 @@ protected function createTab(string $type): void
foreach ($messages as $message) {
$fn = key($message);
- $this->debugBar[$type]->$fn($message[$fn]);
+ $this->debugBar[$type]->log($fn, $message[$fn]);
}
}
diff --git a/tests/Unit/Debugger/DebuggerTest.php b/tests/Unit/Debugger/DebuggerTest.php
index ac7d0c3d..8821c9f0 100644
--- a/tests/Unit/Debugger/DebuggerTest.php
+++ b/tests/Unit/Debugger/DebuggerTest.php
@@ -108,7 +108,7 @@ public function testDebugbarRender(): void
$this->debugger->initStore();
- $rendererMock = Mockery::mock('alias:' . JavascriptRenderer::class);
+ $rendererMock = Mockery::mock(JavascriptRenderer::class);
$rendererMock->shouldReceive('setBaseUrl')->andReturnSelf();
$rendererMock->shouldReceive('addAssets')->andReturnSelf();
$rendererMock->shouldReceive('renderHead')->andReturn('
');
@@ -124,6 +124,33 @@ public function testDebugbarRender(): void
$this->assertStringContainsString('Debug Bar
', $output);
}
+ public function testDebugbarRenderReplaysArrayPayloadsThroughLog(): void
+ {
+ $this->debugger->initStore();
+ $this->debugger->addToStoreCell(Debugger::ROUTES, LogLevel::INFO, ['Route' => '/welcome']);
+
+ $collectorMock = Mockery::mock(MessagesCollector::class);
+ $collectorMock->shouldReceive('log')
+ ->once()
+ ->with(LogLevel::INFO, ['Route' => '/welcome']);
+
+ $this->debugBarMock->shouldReceive('hasCollector')
+ ->with(Debugger::ROUTES)
+ ->andReturn(true);
+ $this->debugBarMock->shouldReceive('offsetGet')
+ ->with(Debugger::ROUTES)
+ ->andReturn($collectorMock);
+
+ $method = new \ReflectionMethod($this->debugger, 'createTab');
+ $method->setAccessible(true);
+ $method->invoke($this->debugger, Debugger::ROUTES);
+
+ $this->assertEquals(
+ ['info' => ['Route' => '/welcome']],
+ $this->debuggerStore->get(Debugger::ROUTES)[0]
+ );
+ }
+
public function testDebugbarRenderReturnsEmptyWhenDisabled(): void
{
config()->set('app.debug', false);
From dfe79cc4ab8007a5b9a00a2caf9e12f987e7cf58 Mon Sep 17 00:00:00 2001
From: Arman <407448+armanist@users.noreply.github.com>
Date: Mon, 6 Jul 2026 21:32:54 +0400
Subject: [PATCH 2/2] [#532] Type debugger message collectors
---
src/Debugger/Debugger.php | 25 +++++++++++++++++++++----
tests/Unit/Debugger/DebuggerTest.php | 5 ++++-
2 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/src/Debugger/Debugger.php b/src/Debugger/Debugger.php
index fb9837fd..a42db167 100644
--- a/src/Debugger/Debugger.php
+++ b/src/Debugger/Debugger.php
@@ -166,16 +166,33 @@ public function render(): string
*/
protected function createTab(string $type): void
{
- if (!$this->debugBar->hasCollector($type)) {
- $this->debugBar->addCollector(new MessagesCollector($type));
- }
+ $collector = $this->resolveMessagesCollector($type);
$messages = $this->store->get($type);
foreach ($messages as $message) {
$fn = key($message);
- $this->debugBar[$type]->log($fn, $message[$fn]);
+ $collector->log($fn, $message[$fn]);
+ }
+ }
+
+ /**
+ * Ensures the requested debug tab collector can accept mixed message payloads.
+ * @throws DebugBarException
+ */
+ protected function resolveMessagesCollector(string $type): MessagesCollector
+ {
+ if (!$this->debugBar->hasCollector($type)) {
+ $this->debugBar->addCollector(new MessagesCollector($type));
}
+
+ $collector = $this->debugBar->getCollector($type);
+
+ if (!$collector instanceof MessagesCollector) {
+ throw new DebugBarException("Collector '{$type}' must be a MessagesCollector instance");
+ }
+
+ return $collector;
}
/**
diff --git a/tests/Unit/Debugger/DebuggerTest.php b/tests/Unit/Debugger/DebuggerTest.php
index 8821c9f0..b73bcffe 100644
--- a/tests/Unit/Debugger/DebuggerTest.php
+++ b/tests/Unit/Debugger/DebuggerTest.php
@@ -117,6 +117,9 @@ public function testDebugbarRender(): void
$this->debugBarMock->shouldReceive('getJavascriptRenderer')->andReturn($rendererMock);
$this->debugBarMock->shouldReceive('hasCollector')->with(Mockery::any())->andReturn(true);
+ $this->debugBarMock->shouldReceive('getCollector')
+ ->with(Mockery::any())
+ ->andReturn(Mockery::mock(MessagesCollector::class));
$output = $this->debugger->render();
@@ -137,7 +140,7 @@ public function testDebugbarRenderReplaysArrayPayloadsThroughLog(): void
$this->debugBarMock->shouldReceive('hasCollector')
->with(Debugger::ROUTES)
->andReturn(true);
- $this->debugBarMock->shouldReceive('offsetGet')
+ $this->debugBarMock->shouldReceive('getCollector')
->with(Debugger::ROUTES)
->andReturn($collectorMock);