laravel-state-machines

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Laravel State Machines

Laravel 状态机

State machines with Spatie Model States for complex state transitions and validation.
基于Spatie Model States的状态机,用于实现复杂的状态转换与验证。

Core Concept

核心概念

state-management.md - State machine patterns:
  • Spatie Model States setup
  • State classes with behavior
  • Transition classes with validation
  • State-specific methods
  • When to use state machines vs simple enums
  • Testing state transitions
state-management.md - 状态机模式:
  • Spatie Model States 配置
  • 包含行为的状态类
  • 带验证的转换类
  • 状态专属方法
  • 状态机与简单枚举的适用场景对比
  • 状态转换测试

Pattern

模式示例

php
// State classes
final class DraftOrderState extends OrderState
{
    public function canBeSubmitted(): bool
    {
        return true;
    }
}

final class PendingOrderState extends OrderState
{
    public function canBeSubmitted(): bool
    {
        return false;
    }
}

// Transition class
final class SubmitOrderTransition extends Transition
{
    public function handle(): OrderState
    {
        // Validation and side effects

        return new PendingOrderState($this->order);
    }
}

// Usage
$order->status->transitionTo(PendingOrderState::class);
Use state machines for complex state with validation, side effects, or state-specific behavior. Use simple enums for basic status fields.
php
// 状态类
final class DraftOrderState extends OrderState
{
    public function canBeSubmitted(): bool
    {
        return true;
    }
}

final class PendingOrderState extends OrderState
{
    public function canBeSubmitted(): bool
    {
        return false;
    }
}

// 转换类
final class SubmitOrderTransition extends Transition
{
    public function handle(): OrderState
    {
        // 验证与副作用处理

        return new PendingOrderState($this->order);
    }
}

// 使用示例
$order->status->transitionTo(PendingOrderState::class);
在需要处理带验证、副作用或状态专属行为的复杂状态时,使用状态机;基础状态字段则使用简单枚举。