CStatePersister
| Пакет | system.base |
|---|---|
| Наследование | class CStatePersister » CApplicationComponent » CComponent |
| Реализует | IApplicationComponent, IStatePersister |
| С версии | 1.0 |
| Исходный код | framework/base/CStatePersister.php |
Его можно использовать для сохранения данных, доступных через несколько запросов и сессий.
По умолчанию 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|строка | содержимое файла |
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() |
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, если данные состояния недоступны. |
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 | данные состояния (должны быть сериализуемы). |
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