2

レコードのステータス変更の実装に取り​​組んでいます。たとえば、レコードが作成されると、管理者がその状態を「アクティブ」、「拒否」、または「失効」に変更するまで、レコードは「保留」状態で開始されます。

問題は、ステータスが保留中からアクティブに変更された場合、ステータスを保留中または拒否に戻すことはできません。拒否されたステータスは、アクティブに戻すことができます。

取り消されたステータスは、アクティブ、保留、または拒否に変更できません。現時点では、これを検出するための一連の if/else ステートメントがありますが、より論理的で標準的なアプローチがあるかどうか疑問に思いました。

4

1 に答える 1

4

許可されたすべてのトランジションを持つ配列を持つことができます:

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

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

A から B に移動でき、B から C に移動できる場合、A から C に移動できる場合 (それが必要な場合) を検出できる、もう少し複雑なことを行うことができます。グラフ理論の文脈で到達可能性を参照してください。

于 2010-08-06T14:10:40.570 に答える