我正在为记录进行状态更改实施。例如,当创建记录时,它开始处于“待定”状态,直到管理员将其状态更改为“活动”、“拒绝”或“撤销”。
问题是,如果状态已从待处理更改为活动,则无法将状态更改回待处理或拒绝。拒绝状态可以更改回活动状态。
撤销状态不能更改为活动、待定或拒绝。目前我有一系列 if/else 语句来检测这一点,但我想知道是否有更合乎逻辑和标准的方法。
您可以拥有一个包含所有允许转换的数组:
$allowedTransitions = array(
"pending" => array("active", "rejected", "revoked"),
"active" => array("revoked"),
);
if (in_array($after, $allowedTransitions[$before])) { //...
你可以做一些更复杂的事情,可以检测到如果可以从 A 到 B,你可以从 B 到 C,那么你可以从 A 到 C(如果这是你想要的)。请参阅图论背景下的可达性。