Laravel Model States is a Spatie package by Brent Roose that adds advanced state support to Laravel models.
For full details on this package, read the official documentation; however, we will provide a few examples from the readme here to give you an idea what this package provides:
Here’s an example from the readme of a Payment
model and how you’d define a state for this model using this package:
1use Spatie\ModelStates\HasStates; 2 3/** 4 * @property \App\States\PaymentState state 5 */ 6class Payment extends Model 7{ 8 use HasStates; 9 10 protected function registerStates(): void11 {12 $this13 ->addState('state', PaymentState::class)14 ->allowTransition(Pending::class, Paid::class)15 ->allowTransition(Pending::class, Failed::class, PendingToFailed::class);16 }17}
The PaymentState
in the example above is defined as follows:
1// The abstract PaymentState class 2use Spatie\ModelStates\State; 3 4abstract class PaymentState extends State 5{ 6 abstract public function color(): string; 7} 8 9// The "paid" state for the Payment model10class Paid extends PaymentState11{12 public function color(): string13 {14 return 'green';15 }16}
And finally here’s an example of transitioning the state:
1$payment = Payment::find(1);2 3$payment->state->transitionTo(Paid::class);4 5echo $payment->state->color();
According to the package readme, it combines the concepts from the state pattern and state machines—you should be familiar with these concepts before using this package. The video State Pattern – Design Patterns (ep 17) is an excellent resource for understanding the basics of state machines.
To learn more about this package, view the source code on GitHub at spatie/laravel-model-states and read the model states documenation.
0 comments:
Post a Comment
Thanks