CDbStatePersister
| Пакет | system.base |
|---|---|
| Наследование | класс CDbStatePersister » CApplicationComponent » CComponent |
| Реализует | IApplicationComponent, IStatePersister |
| С версии | 1.1.17 |
| Исходный код | framework/base/CDbStatePersister.php |
CDbStatePersister реализует хранение данных в базе данных.
Он может использоваться для сохранения данных между несколькими запросами и сессиями.
По умолчанию CDbStatePersister хранит данные в таблице с именем 'state'. Вы можете изменить расположение, установив свойство stateTableName.
Для получения данных из CDbStatePersister вызовите метод load(). Для сохранения данных вызовите метод save().
Сравнение хранилища состояния, сессии и кэша:
Он может использоваться для сохранения данных между несколькими запросами и сессиями.
По умолчанию CDbStatePersister хранит данные в таблице с именем 'state'. Вы можете изменить расположение, установив свойство stateTableName.
Для получения данных из CDbStatePersister вызовите метод load(). Для сохранения данных вызовите метод save().
Сравнение хранилища состояния, сессии и кэша:
- Сессия: данные сохраняются в пределах одной пользовательской сессии.
- Хранилище состояния: данные сохраняются на протяжении всех запросов/сессий (например, счётчик посещений).
- Кэш: быстрое и летучее хранилище. Может использоваться как хранилище для сессий или хранилища состояния.
Свойства
| Свойство | Тип | Описание | Определено в |
|---|---|---|---|
| behaviors | массив | поведения, которые должны быть присоединены к этому компоненту. | CApplicationComponent |
| db | CDbConnection | экземпляр | CDbStatePersister |
| dbComponent | строка | идентификатор соединения | CDbStatePersister |
| isInitialized | булево | Проверяет, был ли инициализирован этот компонент приложения. | CApplicationComponent |
| keyField | строка | Имя столбца для поля ключа | CDbStatePersister |
| stateTableName | строка | имя таблицы базы данных, хранящей данные состояния. Убедитесь, что таблица существует, или пользователю базы данных предоставлены права на создание таблиц. | CDbStatePersister |
| valueField | строка | Имя столбца для поля значения | CDbStatePersister |
Публичные методы
| Метод | Описание | Определено в |
|---|---|---|
| __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 |
| exists() | CDbStatePersister | |
| getEventHandlers() | Возвращает список присоединённых обработчиков событий для события. | CComponent |
| getIsInitialized() | Проверяет, был ли инициализирован этот компонент приложения. | CApplicationComponent |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли обработчики событий для указанного события. | CComponent |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| init() | Инициализирует компонент. | CDbStatePersister |
| load() | Загружает данные состояния из хранилища. | CDbStatePersister |
| raiseEvent() | Вызывает событие. | CComponent |
| save() | Сохраняет состояние приложения в постоянном хранилище. | CDbStatePersister |
Защищенные методы
| Метод | Описание | Определено в |
|---|---|---|
| createTable() | Создаёт таблицу хранилища состояния | CDbStatePersister |
Подробности свойств
db свойство
public CDbConnection $db;
экземпляр
dbComponent свойство
public string $dbComponent;
идентификатор соединения
keyField свойство
public string $keyField;
Имя столбца для поля ключа
stateTableName свойство
public string $stateTableName;
имя таблицы базы данных, хранящей данные состояния. Убедитесь, что таблица существует, или пользователю базы данных предоставлены права на создание таблиц.
valueField свойство
public string $valueField;
Имя столбца для поля значения
Подробности методов
createTable() метод
protected void createTable() |
Исходный код: framework/base/CDbStatePersister.php#137 (показать)
protected function createTable()
{
try
{
$command=$this->db->createCommand();
$command->createTable($this->stateTableName,array(
$this->keyField=>'string NOT NULL',
$this->valueField=>'text NOT NULL',
'PRIMARY KEY ('.$this->db->quoteColumnName($this->keyField).')'
));
}
catch (CDbException $e)
{
throw new CException(Yii::t('yii','Can\'t create state persister table. Check CREATE privilege for \'{db}\' connection user or create table manually with SQL: {sql}.',array('{db}'=>$this->dbComponent,'{sql}'=>$command->text ) ) );
}
}
Создаёт таблицу хранилища состояния
exists() метод
public mixed exists() | ||
| {возвращаемое значение} | смешанный тип | |
Исходный код: framework/base/CDbStatePersister.php#123 (показать)
public function exists()
{
$command=$this->db->createCommand();
$command=$command->select($this->keyField)->from($this->stateTableName);
$command=$command->where($this->db->quoteColumnName($this->keyField).'=:key',array(
':key'=>Yii::app()->name
));
return $command->queryScalar();
}
init() метод
public void init() |
Исходный код: framework/base/CDbStatePersister.php#64 (показать)
public function init()
{
parent::init();
if($this->stateTableName===null)
throw new CException(Yii::t('yii', 'stateTableName param cannot be null.'));
$this->db=Yii::app()->getComponent($this->dbComponent);
if($this->db===null)
throw new CException(Yii::t('yii', '\'{db}\' component doesn\'t exist.',array(
'{db}'=>$this->dbComponent
)));
if(!($this->db instanceof CDbConnection))
throw new CException(Yii::t ('yii', '\'{db}\' component is not a valid CDbConnection instance.',array(
'{db}'=>$this->dbComponent
)));
if($this->db->schema->getTable($this->stateTableName,true)===null)
$this->createTable();
}
Инициализирует компонент. Этот метод переопределяет реализацию родительского класса, гарантируя, что stateFile содержит корректное значение.
load() метод
public mixed load() | ||
| {return} | смешанный | данные состояния. Нулевое значение, если данные состояния недоступны. |
Исходный код: framework/base/CDbStatePersister.php#86 (показать)
public function load()
{
$command=$this->db->createCommand();
$command=$command->select($this->valueField)->from($this->stateTableName);
$command=$command->where($this->db->quoteColumnName($this->keyField).'=:key',array(
':key'=>Yii::app()->name
));
$state=$command->queryScalar();
if(false!==$state)
return unserialize($state);
else
return null;
}
Загружает данные состояния из постоянного хранилища.
save() метод
public int save(mixed $state) | ||
| $state | смешанный | данные состояния (должны быть сериализуемы). |
| {return} | целое | |
Исходный код: framework/base/CDbStatePersister.php#105 (показать)
public function save($state)
{
$command=$this->db->createCommand();
if(false===$this->exists())
return $command->insert($this->stateTableName,array(
$this->keyField=>Yii::app()->name,
$this->valueField=>serialize($state)
));
else
return $command->update($this->stateTableName,array($this->valueField=>serialize($state)),
$this->db->quoteColumnName($this->keyField).'=:key',
array(':key'=>Yii::app()->name)
);
}
Сохраняет состояние приложения в постоянном хранилище.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CDbStatePersister