通过限制改变状态

时间:2010-08-06 14:06:49

标签: php status

我正在处理记录的状态更改实现。例如,创建记录时,它会以“待处理”状态开始,直到管理员将其状态更改为“活动”,“拒绝”或“已撤销”。

问题是,如果状态已从挂起更改为活动状态,则无法将状态更改回挂起或拒绝。被拒绝的状态可以更改回活动状态。

撤销状态无法更改为有效,待处理或已拒绝。目前我有一系列if / else语句来检测这个,但我想知道是否有更合乎逻辑的标准方法。

1 个答案:

答案 0 :(得分:4)

你可以拥有一个包含所有允许转换的数组:

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

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

你可以做一些更复杂的事情,可以发现如果可以从A到B,你可以从B到C,那么你可以去A到C(如果这是你想要的东西)。请参阅图论中的reachability