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