Квест → Как хакнуть форму
Прошли: 77
Laravel Eloquent State Machines - это пакет Андре Сантибаньеса(Andrés Santibáñez), который упрощает переход состояний Eloquent-моделей:
В эти выходные я начал работать над новым пакетом для @laravelphp, реализующий управоение конечными автоматами для моделей Eloquent. Было прикольно и я многому научился в процессе.
Я только что тегнул версию v1.0.0. Наслаждайтесь!
Отзывы приветствуются!
- Андрес Сантибаньес (@asantibanez) 7 декабря 2020 года
Переход состояний осуществляется путем определения логики перехода в конкретном автомате. Вот пример из readme модели SalesOrder:
// 'pending', 'approved', 'declined' or 'processed' $salesOrder->status; // null, 'pending', 'completed' $salesOrder->fulfillment; // // Transition state examples // $salesOrder->status()->transitionTo('approved'); $salesOrder->fulfillment()->transitionTo('completed'); // Transition with custom properties $salesOrder->status()->transitionTo('approved', [ 'comments' => 'Customer has available credit', ]);
Вот несколько примеров проверки истории переходов:
$salesOrder->status()->was('approved'); $salesOrder->status()->timesWas('approved'); $salesOrder->status()->whenWas('approved'); $salesOrder->fulfillment()->snapshowWhen('completed'); $salesOrder->status()->history()->get();
Наконец, вот пример того, как модель может использовать этот пакет:
namespace App\Models; use App\StateMachines\SalesOrders\StatusStateMachine; use Asantibanez\LaravelEloquentStateMachines\Traits\HasStateMachines; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class SalesOrder extends Model { use HasFactory; use HasStateMachines; public $stateMachines = [ 'status' => StatusStateMachine::class, ]; }
У Андре есть демо-приложение, в котором показано как использовать этот пакет с Laravel. Более подробную информацию об этом пакете, полные инструкции по установке и исходный код вы можете просмотреть на GitHub.