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

Это мой код:

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

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

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

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

1

Решение

Согласно 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,

1

Другие решения

Если вы посмотрите на 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;
}
}
0

По вопросам рекламы [email protected]