5

我希望在 PHP 应用程序中实现用户状态/工作流处理。

目前有:

  • 基于用户的系统,任何用户都可以处于大约 10 种不同状态(启用、禁用、预注册、取消注册、删除等)
  • 根据不同的系统事件定义关于用户可以从哪个状态进入的规则
  • 一个相当混乱(但大部分都在工作)的系统,其中充满了散布在各处的 IF 和 SWITCH

想要:

  • 用允许定义那些用户转换规则的“智能”状态机替换当前的 IFfy 用户状态处理
  • 允许可视化那些定义的规则
  • 通过确保用户只能处于合法状态,使系统更加安全和防弹

我的研究:

我检查了 SO 和其他地方的工作流和状态机的 PHP 实现,有前途的候选人似乎是

我将不胜感激有关使用上述任何一个库的任何经验和/或关于我需要的适用性的意见或对其他地方的提示的意见。

4

1 回答 1

1

根据您的状态设置方式,听起来您可以设置一个带有工厂的类系统来优雅地处理所有这些?

您还可以使用状态检查设置您的类,您可能会抛出异常并且基本上无法实例化该类(因此无法进入该状态)。

我在想这样的事情可能对你有用:

class StateFactory {
    $currentState;

    function __construct(){
        if(!isset($_SESSION['currentState'])){
            $this->currentState = 'StateOne';
        }
        else{
            $this->currentState = $_SESSION['currentState'];
        }

        $this->currentState = new {$this->currentState}->processState(); // I think something like this will work
    }

    function __deconstruct(){
        $_SESSION['currentState'] = $this->currentState;
    }
}

abstract class State{
    abstract function processState();
}

class StateOne extends State{
    function processState(){
        if(<check what is needed for this state>){
            <do what you need to do for this state>
            return 'StateTwo';
        }
        else
        {
            return 'StateWhatever';
        }
    }
}    

class StateTwo extends State{
    function processState(){
        if(<check what is needed for this state>){
            <do what you need to do for this state>
            return 'StateThree';
        }
        else
        {
            return 'StateWhatever';
        }
    }
}    

class StateThree extends State{
    ...
}

显然,这其中缺少很多东西,需要做很多事情才能将其变成您可以实际使用的东西,但是如果您像这样拆分它们,它就不会那么混乱,您将能够知道每个正在检查状态以及正在检查的内容。

于 2011-10-04T16:45:33.580 回答