2014-04-07 18 views
6

Mi chiedo se Laravel abbia un meccanismo di macchina a stati incorporato? E se no, qual è il modo migliore per usare questa eccellente libreria chiamata Finite (https://github.com/yohang/Finite).Finite State Machine e persistenza in Laravel

Ecco quello che ho (caso d'uso: una scheda di lavoro):

  • utente crea un'offerta (stato iniziale: creato)
  • utente prevede l'offerta (Stato: bozza)
  • utente pubblicati l'offerta (stato finale: pubblicata)

Per iniziare, ho fatto il mio modello "stateful":

use Finite\StatefulInterface; 
class Offer extends Eloquent implements StatefulInterface { 

Poi nelle mie offerte di Action Controller negozio:

$stateMachine = new StateMachine(); 
$stateMachine->addState(new State('created', StateInterface::TYPE_INITIAL)); 
$stateMachine->addState('draft'); 
$stateMachine->addState(new State('published', StateInterface::TYPE_FINAL)); 

$stateMachine->addTransition('preview', 'created', 'draft'); 
$stateMachine->addTransition('publish', 'draft', 'published'); 

$stateMachine->setObject($offer); 
$stateMachine->initialize(); 

Da quello che ho capito, quando un utente visualizza l'anteprima un'offerta (per esempio), dovrei chiamando:

$stateMachine->apply('preview'). 

La mia domanda è:

Come faccio a tenere traccia di tutti gli stati e le transizioni nella mia app? Memorizzo gli stati nel mio modello di offerta? Creo tabelle aggiuntive?

+0

Si prega di condividere i vostri risultati! :-) – menjaraz

+0

Come avviare lo stato macchina con stato normale? https://github.com/yohang/Finite/issues/114 –

risposta