2010-08-06 7 views
2

Je travaille sur une implémentation de changement d'état pour les enregistrements. Par exemple, lorsqu'un enregistrement est créé, il commence dans un état "en attente" jusqu'à ce qu'un administrateur passe son état à "actif", "rejeté" ou "révoqué". Le fait est que, si un statut a été changé de pending à active, le statut ne peut pas être remis en attente ou rejeté. Un statut rejeté peut être changé en actif.Modification du statut avec restrictions

Un statut révoqué ne peut pas être activé, en attente ou rejeté. En ce moment j'ai une série de déclarations if/else pour le détecter, mais je me demandais s'il y avait une approche plus logique et standard.

Répondre

4

Vous pourriez avoir un tableau avec toutes les transitions permises:

$allowedTransitions = array(
    "pending" => array("active", "rejected", "revoked"), 
    "active" => array("revoked"), 
); 

if (in_array($after, $allowedTransitions[$before])) { //... 

Vous pouvez faire quelque chose d'un peu plus compliqué qui pourrait détecter que si peut aller de A à B et vous pouvez passer de B à C, alors vous pouvez aller de A à C (si c'est quelque chose que vous voulez). Voir reachability dans le contexte de la théorie des graphes.