From 49c4b7f2c527a04a18d4ddfd74c01211e2178864 Mon Sep 17 00:00:00 2001 From: Caleb Porzio Date: Wed, 12 Nov 2025 14:44:38 -0500 Subject: [PATCH 1/6] update component resolution --- src/Component.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Component.php b/src/Component.php index b68cbea..cb956aa 100644 --- a/src/Component.php +++ b/src/Component.php @@ -82,8 +82,8 @@ public function voltComponentName(): string */ public function getAlias(): string { - return $this->__alias ??= array_search(static::class, (fn () => $this->aliases)->call( - app(ComponentRegistry::class), + return $this->__alias ??= array_search(static::class, (fn () => $this->resolvedComponentCache)->call( + app('livewire.factory'), )); } From 24304f6da7eff4e7cf41e1d95eb1b4f429bce294 Mon Sep 17 00:00:00 2001 From: calebporzio <3670578+calebporzio@users.noreply.github.com> Date: Wed, 12 Nov 2025 19:45:03 +0000 Subject: [PATCH 2/6] Fix code styling --- src/Component.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Component.php b/src/Component.php index cb956aa..7b05cba 100644 --- a/src/Component.php +++ b/src/Component.php @@ -8,7 +8,6 @@ use Illuminate\Support\Facades; use Illuminate\Support\Str; use Livewire\Component as LivewireComponent; -use Livewire\Mechanisms\ComponentRegistry; use Livewire\Volt\Actions\ReturnLayout; use Livewire\Volt\Actions\ReturnTitle; use Livewire\Volt\Actions\ReturnViewData; From 9949e4877a16f577c44a824262a6503f7a44f362 Mon Sep 17 00:00:00 2001 From: Caleb Porzio Date: Wed, 12 Nov 2025 14:50:47 -0500 Subject: [PATCH 3/6] support both 3.x and 4.x --- src/Component.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Component.php b/src/Component.php index 7b05cba..1f5e80e 100644 --- a/src/Component.php +++ b/src/Component.php @@ -81,6 +81,14 @@ public function voltComponentName(): string */ public function getAlias(): string { + // Livewire 3.x alias registry... + if (app()->has(ComponentRegistry::class)) { + return $this->__alias ??= array_search(static::class, (fn () => $this->aliases)->call( + app(ComponentRegistry::class), + )); + } + + // Livewire 4.x alias registry... return $this->__alias ??= array_search(static::class, (fn () => $this->resolvedComponentCache)->call( app('livewire.factory'), )); From c3bbaf407b8704d715d706d03a80fee50a52ce32 Mon Sep 17 00:00:00 2001 From: Caleb Porzio Date: Wed, 12 Nov 2025 14:54:44 -0500 Subject: [PATCH 4/6] add import --- src/Component.php | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/Component.php b/src/Component.php index 1f5e80e..70694b4 100644 --- a/src/Component.php +++ b/src/Component.php @@ -2,17 +2,18 @@ namespace Livewire\Volt; -use AllowDynamicProperties; -use BadMethodCallException; -use Illuminate\Container\Container; -use Illuminate\Support\Facades; -use Illuminate\Support\Str; -use Livewire\Component as LivewireComponent; -use Livewire\Volt\Actions\ReturnLayout; -use Livewire\Volt\Actions\ReturnTitle; -use Livewire\Volt\Actions\ReturnViewData; -use Livewire\Volt\Contracts\FunctionalComponent; use Livewire\Volt\Support\Reflection; +use Livewire\Volt\Contracts\FunctionalComponent; +use Livewire\Volt\Actions\ReturnViewData; +use Livewire\Volt\Actions\ReturnTitle; +use Livewire\Volt\Actions\ReturnLayout; +use Livewire\Mechanisms\ComponentRegistry; +use Livewire\Component as LivewireComponent; +use Illuminate\Support\Str; +use Illuminate\Support\Facades; +use Illuminate\Container\Container; +use BadMethodCallException; +use AllowDynamicProperties; #[AllowDynamicProperties] abstract class Component extends LivewireComponent From 0347bd1cf8f02856bac617e52f114de2c2f5e6c0 Mon Sep 17 00:00:00 2001 From: calebporzio <3670578+calebporzio@users.noreply.github.com> Date: Wed, 12 Nov 2025 19:55:02 +0000 Subject: [PATCH 5/6] Fix code styling --- src/Component.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Component.php b/src/Component.php index 70694b4..8dd9235 100644 --- a/src/Component.php +++ b/src/Component.php @@ -2,18 +2,18 @@ namespace Livewire\Volt; -use Livewire\Volt\Support\Reflection; -use Livewire\Volt\Contracts\FunctionalComponent; -use Livewire\Volt\Actions\ReturnViewData; -use Livewire\Volt\Actions\ReturnTitle; -use Livewire\Volt\Actions\ReturnLayout; -use Livewire\Mechanisms\ComponentRegistry; -use Livewire\Component as LivewireComponent; -use Illuminate\Support\Str; -use Illuminate\Support\Facades; -use Illuminate\Container\Container; -use BadMethodCallException; use AllowDynamicProperties; +use BadMethodCallException; +use Illuminate\Container\Container; +use Illuminate\Support\Facades; +use Illuminate\Support\Str; +use Livewire\Component as LivewireComponent; +use Livewire\Mechanisms\ComponentRegistry; +use Livewire\Volt\Actions\ReturnLayout; +use Livewire\Volt\Actions\ReturnTitle; +use Livewire\Volt\Actions\ReturnViewData; +use Livewire\Volt\Contracts\FunctionalComponent; +use Livewire\Volt\Support\Reflection; #[AllowDynamicProperties] abstract class Component extends LivewireComponent From d63e1fc876f3f0ced64f5315eae46171e7af29bc Mon Sep 17 00:00:00 2001 From: Caleb Porzio Date: Wed, 12 Nov 2025 14:59:50 -0500 Subject: [PATCH 6/6] apply similar fix to test utility --- tests/Feature/FunctionalComponentTest.php | 40 ++++++++++++++++------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/tests/Feature/FunctionalComponentTest.php b/tests/Feature/FunctionalComponentTest.php index 6480be2..aa3f63f 100644 --- a/tests/Feature/FunctionalComponentTest.php +++ b/tests/Feature/FunctionalComponentTest.php @@ -25,6 +25,22 @@ Volt::mount([__DIR__.'/resources/views/functional-api-pages', __DIR__.'/resources/views/functional-api'], [GlobalTrait::class]); }); +/** + * Reset the resolved component names cache to simulate a new request. + */ +function resetResolvedComponentNames(): void +{ + // Livewire 3.x alias registry... + if (app()->has(ComponentRegistry::class)) { + (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + + return; + } + + // Livewire 4.x alias registry... + (fn () => $this->resolvedComponentCache = [])->call(app('livewire.factory')); +} + it('can be rendered', function () { Livewire::test('basic-component') ->assertSee('Hello World'); @@ -419,7 +435,7 @@ public function render() $componentA->assertSee('Hello Taylor'); $componentAClass = get_class($componentA->instance()); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); $componentB = Livewire::test('basic-component', ['name' => 'Nuno']); $componentB->assertSee('Hello Nuno'); @@ -443,7 +459,7 @@ public function render() $componentA->assertSee('Hello Taylor'); $componentAClass = get_class($componentA->instance()); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); // Clear the views cache... Artisan::call('view:clear'); @@ -471,7 +487,7 @@ public function render() $componentA->assertSee('Hello Taylor'); $componentAClass = get_class($componentA->instance()); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); touch($original); // Simulate a change to the component file... clearstatcache(); @@ -674,16 +690,16 @@ public function render() Volt::test('first-fragment-component', ['name' => 'Taylor']) ->assertSee('First - Hello Taylor'); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); Volt::test('first-fragment-component', ['name' => 'Taylor']) ->assertSee('First - Hello Taylor'); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); view()->file(__DIR__.'/resources/views/functional-api-pages/page-with-multiple-fragments.blade.php')->render(); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); view()->file(__DIR__.'/resources/views/functional-api-pages/page-with-multiple-fragments.blade.php')->render(); @@ -710,22 +726,22 @@ public function render() Volt::test('first-fragment-component', ['name' => 'Taylor']) ->assertSee('First - Hello Taylor'); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); Volt::test('first-fragment-component', ['name' => 'Taylor']) ->assertSee('First - Hello Taylor'); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); Volt::test('first-fragment-component', ['name' => 'Taylor']) ->assertSee('First - Hello Taylor'); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); Volt::test('first-fragment-component', ['name' => 'Taylor']) ->assertSee('First - Hello Taylor'); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); Volt::test('first-fragment-component', ['name' => 'Taylor']) ->assertSee('First - Hello Taylor'); @@ -749,7 +765,7 @@ public function render() File::partialMock(); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); Artisan::call('view:clear'); Volt::test('first-fragment-component', ['name' => 'Taylor']) @@ -765,7 +781,7 @@ public function render() ]); }); - (fn () => $this->aliases = [])->call(app(ComponentRegistry::class)); + resetResolvedComponentNames(); Artisan::call('view:clear'); Volt::test('first-fragment-component', ['name' => 'Taylor'])