获取 yii 中所有状态的列表

Get a list of all state in yii

这是我的代码:

for ($i=0; $i < count($rights); $i++) {
    $this->setState($rights[$i], true);
}

这里我动态设置了setState,但我想获取列表中的所有状态。我没有找到关于此的任何参考资料。我只找到了这个:

Yii::app()->user->getState('name');

但这对我没有帮助。我如何获得 yii 中所有状态的列表?谢谢

根据 CWebUser 的 API,没有用于该目的的函数。

根据setState的代码,您可以看到它将值保存在会话中,并且"storing"使用状态没有其他方式。 (就像所有已创建状态的数组)

public function setState($key,$value,$defaultValue=null)
{
    $key=$this->getStateKeyPrefix().$key;
    if($value===$defaultValue)
        unset($_SESSION[$key]);
    else
        $_SESSION[$key]=$value;
}

一种解决方案是手动遍历所有现有会话 ($_SESSION),但我认为这不是很有效的想法。

另一种解决方案是使用 property/variable (array) 来保存您创建的所有状态,而不是使用 foreach 循环,使用 getState .

如果你查看 CWebUser source code,你会看到 getState() 函数只是用 stateKeyPrefix

寻找 $_SESSION
public function getState($key,$defaultValue=null)
    {
        $key=$this->getStateKeyPrefix().$key;
        return isset($_SESSION[$key]) ? $_SESSION[$key] : $defaultValue;
    }

您可以通过以下代码获取状态前缀和所有状态:

$prefix = Yii::app()->user->stateKeyPrefix;
$states = array();
foreach( $_SESSION as $key=>$value ) {
  if( strpos($key, $prefix) === 0 ) {
    states[ substr( $key, strlen( $prefix ) ) ] = $value;
  }
}