1

这是我的代码:

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

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

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

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

4

2 回答 2

1

根据 的 API CWebUser,没有用于此目的的功能。

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

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

一种解决方案是手动浏览所有现有会话($_SESSION),但我认为这不是一个非常有效的想法。

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

于 2015-05-05T09:05:28.340 回答
0

如果您查看 CWebUser源代码,您将看到该 getState()函数只是在寻找一个$_SESSIONstateKeyPrefix

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;
  }
}
于 2015-05-05T09:10:29.067 回答