有限制地改变状态

发布于 2024-09-12 20:02:02 字数 204 浏览 4 评论 0原文

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

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

撤销状态不能更改为有效、待定或拒绝。目前我有一系列 if/else 语句来检测这一点,但我想知道是否有更逻辑和标准的方法。

I'm working on a status changing implementation for records. For example, when a record is created, it commences in a 'pending' state until a administrator changes its state to either 'active', 'rejected' or 'revoked'.

The thing is, if a status has been changed from pending to active, the status cannot be changed back to pending or rejected. A rejected status can be changed back to active.

A revoked status cannot changed to active, pending or rejected. At the moment I have a series of if/else statements to detect this but I wondered if there was a more logical and standard approach.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

℉服软 2024-09-19 20:02:02

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

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

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

你可以做一些更复杂的事情,可以检测如果可以从 A 到 B 并且你可以从 B 到 C,那么你可以从 A 到 C (如果是的话)你想要的东西)。请参阅图论背景下的可达性

You could have an array with all the allowed transitions:

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

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

You could do something a little more complicated that could detect that if can go from A to B and you can go from B to C, then you can go for A to C (if that's something you want). See reachability in the context of graph theory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文