Это мой код:
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;
}
}