blazery/laravel-livewire-wizard

Build wizards using Livewire, extended fork

v2.4.2 2025-07-18 11:37 UTC

This package is auto-updated.

Last update: 2025-07-20 20:11:02 UTC


README

Build wizards using Livewire

Latest Version on Packagist Total Downloads

This package is a fork of Spaties larave-livewire-wizard package, and tries to address and issue I ran into while developing using the package. Should you have encountered the same issue, migrating to this package should be swift, and a near drop in replacement.

The issue

I like what Livewire offers: Forms, Models, and Enums, all easily accessible in Livewire/Components. Unfortunately, using these in a StepComponent will break the state management done by the Wizard. Navigating back to a previous step that uses one of these data types will likely throw an Exception.

Cannot assign string to property \StepComponent::$likesCoffee of type \Enums\LikesCoffeeEnum;

or

Cannot assign array to property \StepComponent::$form of type \Livewire\Form;

This is because these objects don't retain type while traversing the Livewire event system. By default, events get serialized to JSON, and deserialized by the wizard again. This flow of events through the frontend results in data arriving with array or string types, instead of Forms, Arrays, or other synthesizables. This change uses Livewire/Synthesizers, an existing Livewire feature, to process these events instead. The end result, Forms, Models, Enums, and all other Synthesizable data types available in StepComponents.ult, Forms, Models, Enums and all other Synthesizable data types available in StepComponents.

Documentation

Migrating to this package

This package ships with two new classes the replace the old ones.

- use Spatie\LivewireWizard\Components\WizardComponent;
+ use Spatie\LivewireWizard\Components\HydratedWizardComponent;

- class MyWizardComponent extends WizardComponent
+ class MyWizardComponent extends HydratedWizardComponent
{

}
- use Spatie\LivewireWizard\Components\StepComponent;
+ use Spatie\LivewireWizard\Components\DehydratedStepComponent;

- class MyStepComponent extends StepComponent
+ class MyStepComponent extends DehydratedStepComponent
{

}

Changing these classes is all it takes for your steps and wizard to support a wider variety of datatypes. For backwards compatibility reasons, the original components are still available. StepComponents that don't require Forms or Models can still extend Spatie\LivewireWizard\Components\StepComponent, skipping the dehydration of events. This is compatible with the new HydratedWizardComponent, so mixing StepComponents and DehydratedStepComponent in a single Wizard is allowed.

Alternative method

The changes made for this new feature are also available as traits. Adding these to existing Wizards and Steps should have the same result.

See, Spatie\LivewireWizard\Components\Concerns\WizardHydratesState and Spatie\LivewireWizard\Components\Concerns\DehydratedStepComponent for more info.

use Spatie\LivewireWizard\Components\WizardComponent;
+ use Spatie\LivewireWizard\Components\Concerns\WizardHydratesState;

class MyWizardComponent extends WizardComponent
{
+   use WizardHydratesState;

}
  use Spatie\LivewireWizard\Components\StepComponent;
+ use Spatie\LivewireWizard\Components\Concerns\DehydratedStepComponent;

class MyStepComponent extends StepComponent
{
+    use DehydratedStepComponent;

}

Testing

composer test

Credits

Credits to the original developers

And credits to the developers over at Dolphiq, for providing feedback on this.

License

The MIT License (MIT). Please see License File for more information.