Получить список всех состояний в yii

Это мой код:

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

Здесь я устанавливаю setState динамически, но я хочу получить все состояния в списке. Я не нашел никаких ссылок по этому поводу. Я только нашел это:

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

Но это не помогает мне. Как я могу получить список всех штатов в yii? Спасибо

2 ответа

Решение

Согласно 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;
  }
}
Другие вопросы по тегам