这是我的代码:
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;
}
}