1. Go to this page and download the library: Download innoge/laravel-enum-states library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
innoge / laravel-enum-states example snippets
use Illuminate\Database\Eloquent\Model;
use InnoGE\LaravelEnumStates\Attributes\StateMachine;
#[StateMachine('status', OrderStatus::class)]
final class Order extends Model
{
protected function casts(): array
{
return [
'status' => OrderStatus::class,
];
}
}
use InnoGE\LaravelEnumStates\Concerns\TransitionsState;
use InnoGE\LaravelEnumStates\Contracts\StateEnum;
use InnoGE\LaravelEnumStates\StateMachine;
enum OrderStatus: string implements StateEnum
{
use TransitionsState;
case Pending = 'pending';
case Paid = 'paid';
case Shipped = 'shipped';
case Cancelled = 'cancelled';
public static function configureStateMachine(StateMachine $machine): StateMachine
{
return $machine
->default(self::Pending)
->allow(self::Pending, [self::Paid, self::Cancelled])
->allow(self::Paid, [self::Shipped, self::Cancelled]);
}
}
final readonly class MarkOrderAsPaid
{
public function __construct(private PaymentGateway $payments) {}
public function __invoke(Order $model, OrderStatus $from, OrderStatus $to, string $field, array $context): void
{
$this->payments->capture($model);
}
}
use InnoGE\LaravelEnumStates\StateOptions;
StateOptions::all(OrderStatus::class); // value => label, every case
StateOptions::enabled(OrderStatus::class, $order->status); // current state + reachable states
StateOptions::disabledValues(OrderStatus::class, $order->status); // values that should be disabled
use InnoGE\LaravelEnumStates\Filament\EnumStateSelect;
EnumStateSelect::make('status')
->stateEnum(OrderStatus::class);