获取YII中所有州的列表



这是我的代码:

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

在这里,我正在动态设置SetState,但是我想将所有状态都在列表中获取。我没有发现任何引用。我只找到了这个:

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

这没有帮助我。我如何获得YII中所有州的列表?thx

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

根据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

如果您查看cwebuser源代码,那么您将看到 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;
  }
}

最新更新