Spec-Zone.ru › Yii 1.1

CStatePersister

Пакет system.base
Наследование class CStatePersister » CApplicationComponent » CComponent
Реализует IApplicationComponent, IStatePersister
С версии 1.0
Исходный код framework/base/CStatePersister.php
CStatePersister реализует файловое хранилище данных.

Его можно использовать для сохранения данных, доступных через несколько запросов и сессий.

По умолчанию CStatePersister хранит данные в файле с именем 'state.bin', расположенном в папке приложения runtime. Вы можете изменить расположение, установив свойство stateFile.

Для получения данных из CStatePersister вызовите метод load(). Для сохранения данных вызовите метод save().

Сравнение хранилищ состояния, сессий и кэша:
  • сессия: данные сохраняются в рамках одной сессии пользователя.
  • хранилище состояния: данные сохраняются на протяжении всех запросов/сессий (например, счётчик посещений).
  • кэш: летучая и быстрая система хранения. Может быть использована как среда хранения для сессий или хранилища состояния.


Поскольку ресурсы сервера часто ограничены, будьте осторожны, если планируете использовать CStatePersister для хранения больших объёмов данных. В этом случае стоит рассмотреть использование хранилища на базе базы данных для повышения производительности.

CStatePersister — это основной компонент приложения, используемый для хранения глобального состояния приложения. К нему можно обратиться через CApplication::getStatePersister().

Общедоступные свойства

Свойство Тип Описание Определено в
behaviors массив поведение, которое должно быть подключено к этому компоненту. CApplicationComponent
cacheID строка идентификатор компонента кэша приложения, используемого для кэширования значений состояния. CStatePersister
isInitialized логическое значение Проверяет, был ли инициализирован этот компонент приложения. CApplicationComponent
stateFile строка путь к файлу, хранящему данные состояния. CStatePersister

Общедоступные методы

Метод Описание Определено в
__call() Вызывает метод, который не является методом класса. CComponent
__get() Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. CComponent
__isset() Проверяет, является ли значение свойства нулевым. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в значение null. CComponent
asa() Возвращает объект поведения с заданным именем. CComponent
attachBehavior() Присоединяет поведение к этому компоненту. CComponent
attachBehaviors() Присоединяет список поведений к компоненту. CComponent
attachEventHandler() Присоединяет обработчик событий к событию. CComponent
canGetProperty() Определяет, можно ли считать свойство. CComponent
canSetProperty() Определяет, можно ли установить свойство. CComponent
detachBehavior() Отсоединяет поведение от компонента. CComponent
detachBehaviors() Отсоединяет все поведения от компонента. CComponent
detachEventHandler() Отсоединяет существующий обработчик событий. CComponent
disableBehavior() Отключает присоединённое поведение. CComponent
disableBehaviors() Отключает все присоединённые поведения этого компонента. CComponent
enableBehavior() Включает присоединённое поведение. CComponent
enableBehaviors() Включает все присоединённые поведения этого компонента. CComponent
evaluateExpression() Вычисляет PHP выражение или обратный вызов в контексте этого компонента. CComponent
getEventHandlers() Возвращает список присоединённых обработчиков событий для события. CComponent
getIsInitialized() Проверяет, был ли инициализирован этот компонент приложения. CApplicationComponent
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, есть ли присоединённые обработчики для события с данным именем. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
init() Инициализирует компонент. CStatePersister
load() Загружает данные состояния из хранилища. CStatePersister
raiseEvent() Вызывает событие. CComponent
save() Сохраняет состояние приложения в постоянном хранилище. CStatePersister

Защищённые методы

Метод Описание Определено в
getContent() Загружает содержимое файла с использованием общей блокировки, чтобы предотвратить повреждение данных при чтении файла во время записи методом save() CStatePersister

Подробности о свойствах

cacheID свойство

public string $cacheID;

Идентификатор компонента кэша приложения, используемого для кэширования значений состояния. По умолчанию «cache», что относится к основному компоненту кэша приложения. Установите это свойство в false, если вы хотите отключить кэширование значений состояния.

stateFile свойство

public string $stateFile;

Путь к файлу, хранящему данные состояния. Убедитесь, что каталог, содержащий файл, существует и доступен для записи веб-сервером. Если используется относительный путь, убедитесь, что путь правильный.

Подробности о методах

getContent() метод (доступен с версии 1.1.17)

protected bool|string getContent(string $filename)
$filename строка имя файла
{return} bool|строка содержимое файла
Исходный код: framework/base/CStatePersister.php#112 (показать)
protected function getContent($filename)
{
    
$file=@fopen($filename,"r");
    if(
$file && flock($file,LOCK_SH))
    {
        
$contents=@file_get_contents($filename);
        
flock($file,LOCK_UN);
        
fclose($file);
        return 
$contents;
    }
    return 
false;
}

Загружает содержимое файла с помощью общей блокировки, чтобы предотвратить повреждение данных при чтении файла во время записи методом save()

init() метод

public void init()
Исходный код: framework/base/CStatePersister.php#61 (показать)
public function init()
{
    
parent::init();
    if(
$this->stateFile===null)
        
$this->stateFile=Yii::app()->getRuntimePath().DIRECTORY_SEPARATOR.'state.bin';
    
$dir=dirname($this->stateFile);
    if(!
is_dir($dir) || !is_writable($dir))
        throw new 
CException(Yii::t('yii','Unable to create application state file "{file}". Make sure the directory containing the file exists and is writable by the Web server process.',
            array(
'{file}'=>$this->stateFile)));
}

Инициализирует компонент. Этот метод переопределяет реализацию родительского класса, гарантируя, что stateFile содержит корректное значение.

load() метод

public mixed load()
{return} mixed данные состояния. Null, если данные состояния недоступны.
Исходный код: framework/base/CStatePersister.php#76 (показать)
public function load()
{
    
$stateFile=$this->stateFile;
    if(
$this->cacheID!==false && ($cache=Yii::app()->getComponent($this->cacheID))!==null)
    {
        
$cacheKey='Yii.CStatePersister.'.$stateFile;
        if((
$value=$cache->get($cacheKey))!==false)
            return 
unserialize($value);
        else
        {
            if((
$content=$this->getContent($stateFile))!==false)
            {
                
$unserialized_content=unserialize($content);
                
// If it can't be unserialized, don't cache it:
                
if ($unserialized_content!==false || $content=="") 
                    
$cache->set($cacheKey,$content,0,new CFileCacheDependency($stateFile));
                return 
$unserialized_content;
            }
            else
                return 
null;
        }
    }
    elseif((
$content=$this->getContent($stateFile))!==false)
        return 
unserialize($content);
    else
        return 
null;
}

Загружает данные состояния из постоянного хранилища.

save() метод

public void save(mixed $state)
$state mixed данные состояния (должны быть сериализуемы).
Исходный код: framework/base/CStatePersister.php#129 (показать)
public function save($state)
{
    
file_put_contents($this->stateFile,serialize($state),LOCK_EX);
}

Сохраняет состояние приложения в постоянном хранилище.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CStatePersister

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API