PHP Profi

Конечные автоматы для Eloquent Перевод

Eloquent State Machines

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.

2020-12-31 оригинал

Последние посты

Комментарии

авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий