这是我的代码:
for ($i=0; $i < count($rights); $i++) {
$this->setState($rights[$i], true);
}
在这里,我动态设置 setState,但我想获取列表中的所有状态。我没有找到任何关于此的参考资料。我只发现了这个:
Yii::app()->user->getState('name');
但这对我没有帮助。如何获取 yii 中所有状态的列表?谢谢
根据 的 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
.
如果您查看 CWebUser源代码,您将看到该
getState()
函数只是在寻找一个$_SESSION
键stateKeyPrefix
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;
}
}