【问题标题】:Get a list of all state in yii获取 yii 中所有状态的列表
【发布时间】:2015-07-14 21:38:21
【问题描述】:

这是我的代码:

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

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

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

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

【问题讨论】:

  • 你看过this。我认为这是获取所有状态的唯一方法,但您也会获得无用的信息。

标签: php yii getstate


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果您查看 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;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      相关资源
      最近更新 更多