ModuleStorage
Package | framework.modules |
---|---|
Inheritance | class ModuleStorage » Module » LsObject |
Since | 2.0 |
Source Code | /framework/classes/modules/storage/Storage.class.php |
Позволяет легко и быстро работать с небольшими объемами данных, CRUD операции с которыми теперь занимают всего одну строку кода.
Например: $this->Storage_Set('keyname', 'some_mixed_value', $this); // сохранить 'some_mixed_value' под имененем 'keyname' для вашего плагина $this->Storage_Get('keyname', $this); // получить данные по ключу 'keyname' для вашего плагина
Protected Properties
Property | Type | Description | Defined By |
---|---|---|---|
_aBehaviors | Список поведений в виде готовых объектов, формируется автоматически | LsObject | |
aBehaviors | array | Список поведений | LsObject |
aSessionCache | ModuleStorage | ||
bIsInit | bool | Указывает на то, была ли проведенна инициализация модуля | Module |
oMapperStorage | ModuleStorage |
Public Methods
Method | Description | Defined By |
---|---|---|
AddBehaviorHook() | Добавляет хук поведения | LsObject |
AttachBehavior() | Присоединяет поведение к объекту | LsObject |
DetachBehavior() | Отсоединяет поведение от объекта | LsObject |
Get() | Получить значение | ModuleStorage |
GetAll() | Получить все значения | ModuleStorage |
GetBehavior() | Возвращает объект поведения по его имени | LsObject |
GetBehaviors() | Возвращает все объекты поведения | LsObject |
Init() | ModuleStorage | |
Remove() | Удалить значение | ModuleStorage |
RemoveAll() | Удалить все значения | ModuleStorage |
RemoveBehaviorHook() | Удаляет хук поведения | LsObject |
RemoveSmart() | Удалить параметр кеша сессии (без записи в хранилище) | ModuleStorage |
Reset() | Сбросить кеш сессии (без записи в хранилище) | ModuleStorage |
RunBehaviorHook() | Запускает хук поведения на выполнение | LsObject |
Set() | Установить значение | ModuleStorage |
SetInit() | Помечает модуль как инициализированный | Module |
SetSmart() | Сохранить значение параметра на время сессии (без записи в хранилище) | ModuleStorage |
Shutdown() | Метод срабатывает при завершении работы ядра | Module |
Store() | Записать в хранилище значения параметров из кеша сессии | ModuleStorage |
__call() | Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля | LsObject |
__clone() | Блокируем копирование/клонирование объекта | Module |
__construct() | Конструктор, запускается автоматически при создании объекта | LsObject |
__get() | Обработка доступа к объекты поведения | LsObject |
isInit() | Возвращает значение флага инициализации модуля | Module |
Protected Methods
Method | Description | Defined By |
---|---|---|
CheckCaller() | Проверить корректность указания контекста | ModuleStorage |
DeleteFieldOne() | Удалить из БД ключ | ModuleStorage |
GetFieldOne() | Получить из БД строковое значение одного ключа | ModuleStorage |
GetFieldsAll() | Получить из БД все ключи в "сыром" виде | ModuleStorage |
GetKeyForCaller() | Получить имя ключа из текущего, вызывающего метод, контекста | ModuleStorage |
GetOneParam() | Получить значение параметра для ключа | ModuleStorage |
GetParamsAll() | Получить список всех параметров ключа | ModuleStorage |
GetParamsValuesFromRawData() | Получить массив используемых значений параметров ключа по "сырым" данным из БД | ModuleStorage |
PackValue() | Перевести данные в строковый вид (сериализировать) | ModuleStorage |
PrepareBehaviors() | Инициализация поведений | LsObject |
PrepareParamValueBeforeSaving() | Подготовка значения параметра перед сохранением | ModuleStorage |
RemoveAllParams() | Удалить все параметры ключа | ModuleStorage |
RemoveOneParam() | Удалить значение параметра для ключа | ModuleStorage |
RemoveSmartParam() | Удалить значение параметра для ключа на время сессии (без записи в хранилище) | ModuleStorage |
ResetSessionCache() | Сбросить кеш сессии (без записи в хранилище) | ModuleStorage |
RetrieveParamValueFromSavedValue() | Восстановление значения параметра | ModuleStorage |
SetFieldOne() | Записать в БД строку одного ключа | ModuleStorage |
SetOneParam() | Сохранить значение параметра для ключа | ModuleStorage |
SetSmartParam() | Сохранить значение параметра для ключа на время сессии (без записи в хранилище) | ModuleStorage |
Setup() | Настройка | ModuleStorage |
StoreParams() | Записать в хранилище значения параметров для ключа из кеша сессии | ModuleStorage |
UnpackValue() | Восстановить данные из строкового вида (десериализировать) | ModuleStorage |
Property Details
Method Details
protected void CheckCaller($oCaller $oCaller)
| ||
$oCaller | $oCaller | контекст, вызывающий метод |
protected function CheckCaller($oCaller)
{
/*
* контекст должен быть указан или нулл для движка
*/
if (!is_object($oCaller) and !is_null($oCaller)) {
throw new Exception('Storage: caller is not correct. Always use "$this" for caller value. Also it can be set to NULL for engine calls');
}
}
Проверить корректность указания контекста
protected mixed DeleteFieldOne($sKey $sKey, string $sInstance='default')
| ||
$sKey | $sKey | ключ |
$sInstance | string | инстанция |
{return} | mixed |
protected function DeleteFieldOne($sKey, $sInstance = self::DEFAULT_INSTANCE)
{
$sKey = (string)$sKey;
$sInstance = (string)$sInstance;
/*
* сбросить кеш по тегу
*/
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('storage_field_data'));
/*
* построить строку части WHERE запроса
*/
$sWhere = $this->oMapperStorage->BuildFilter(array(
'key' => $sKey,
'instance' => $sInstance
));
/*
* удалить данные
*/
return $this->oMapperStorage->DeleteData($sWhere, 1);
}
Удалить из БД ключ
public null Get($sParamName $sParamName, $oCaller $oCaller=NULL, string $sInstance='default')
| ||
$sParamName | $sParamName | параметр |
$oCaller | $oCaller | контекст, вызывающий метод |
$sInstance | string | инстанция |
{return} | null |
public function Get($sParamName, $oCaller = null, $sInstance = self::DEFAULT_INSTANCE)
{
$sCallerName = $this->GetKeyForCaller($oCaller);
return $this->GetOneParam($sCallerName, $sParamName, $sInstance);
}
Получить значение
public array GetAll($oCaller $oCaller=NULL, string $sInstance='default')
| ||
$oCaller | $oCaller | контекст, вызывающий метод |
$sInstance | string | инстанция |
{return} | array |
public function GetAll($oCaller = null, $sInstance = self::DEFAULT_INSTANCE)
{
$sCallerName = $this->GetKeyForCaller($oCaller);
return $this->GetParamsAll($sCallerName, $sInstance);
}
Получить все значения
protected mixed GetFieldOne($sKey $sKey, string $sInstance='default')
| ||
$sKey | $sKey | ключ |
$sInstance | string | инстанция |
{return} | mixed |
protected function GetFieldOne($sKey, $sInstance = self::DEFAULT_INSTANCE)
{
$sKey = (string)$sKey;
$sInstance = (string)$sInstance;
/*
* построить ключ для кеша
*/
$sCacheKey = self::CACHE_FIELD_DATA_PREFIX . $sKey . '_' . $sInstance;
/*
* есть ли такие данные в кеше
*/
if (($mData = $this->Cache_Get($sCacheKey)) === false) {
/*
* построить строку части WHERE запроса
*/
$sWhere = $this->oMapperStorage->BuildFilter(array(
'key' => $sKey,
'instance' => $sInstance
));
$mData = null;
/*
* получить данные
*/
$aResult = $this->oMapperStorage->GetData($sWhere, 1, 1);
/*
* есть ли данные
*/
if ($aResult['count'] != 0) {
$mData = $aResult['collection']['value'];
$this->Cache_Set($mData, $sCacheKey, array('storage_field_data'), 60 * 60 * 24 * 365); // 1 год
}
}
return $mData;
}
Получить из БД строковое значение одного ключа
protected mixed GetFieldsAll(string $sInstance='default')
| ||
$sInstance | string | инстанция |
{return} | mixed |
protected function GetFieldsAll($sInstance = self::DEFAULT_INSTANCE)
{
$sInstance = (string)$sInstance;
/*
* построить ключ для кеша
*/
$sCacheKey = self::CACHE_FIELD_DATA_PREFIX . '_fields_all_' . $sInstance;
/*
* есть ли такие данные в кеше
*/
if (($mData = $this->Cache_Get($sCacheKey)) === false) {
/*
* построить строку части WHERE запроса
*/
$sWhere = $this->oMapperStorage->BuildFilter(array(
'instance' => $sInstance
));
/*
* получить данные
*/
$mData = $this->oMapperStorage->GetData($sWhere);
$this->Cache_Set($mData, $sCacheKey, array('storage_field_data'), 60 * 60 * 24 * 365); // 1 год
}
return $mData;
}
Получить из БД все ключи в "сыром" виде
protected string GetKeyForCaller($oCaller $oCaller=NULL)
| ||
$oCaller | $oCaller | контекст, вызывающий метод (для движка можно указывать null) |
{return} | string |
protected function GetKeyForCaller($oCaller = null)
{
$this->CheckCaller($oCaller);
/*
* Получаем имя плагина, если возможно
*/
if (!$sCaller = strtolower(Engine::GetPluginName($oCaller))) {
/*
* Если имени нет - значит это вызов ядра
*/
return self::DEFAULT_KEY_NAME;
}
return self::PLUGIN_PREFIX . $sCaller;
}
Получить имя ключа из текущего, вызывающего метод, контекста
protected null GetOneParam($sKey $sKey, $sParamName $sParamName, string $sInstance='default')
| ||
$sKey | $sKey | ключ |
$sParamName | $sParamName | параметр |
$sInstance | string | инстанция |
{return} | null |
protected function GetOneParam($sKey, $sParamName, $sInstance = self::DEFAULT_INSTANCE)
{
/*
* Если значение есть в кеше сессии - получить его
*/
if (isset($this->aSessionCache[$sInstance][$sKey][$sParamName])) {
return $this->aSessionCache[$sInstance][$sKey][$sParamName];
}
/*
* Получить одно значение
*/
if ($aFieldData = $this->GetParamsAll($sKey, $sInstance) and isset($aFieldData[$sParamName])) {
return $aFieldData[$sParamName];
}
return null;
}
Получить значение параметра для ключа
protected array GetParamsAll($sKey $sKey, string $sInstance='default')
| ||
$sKey | $sKey | ключ |
$sInstance | string | инстанция |
{return} | array |
protected function GetParamsAll($sKey, $sInstance = self::DEFAULT_INSTANCE)
{
/*
* Если значение есть в кеше сессии - получить его
*/
if (isset($this->aSessionCache[$sInstance][$sKey])) {
return $this->aSessionCache[$sInstance][$sKey];
}
/*
* Если есть запись для ключа и она не повреждена и корректна
*/
if ($sFieldData = $this->GetFieldOne($sKey, $sInstance)) {
return $this->GetParamsValuesFromRawData($sKey, $sFieldData, $sInstance);
}
return array();
}
Получить список всех параметров ключа
protected array GetParamsValuesFromRawData($sKey $sKey, $sFieldData $sFieldData, $sInstance $sInstance='default')
| ||
$sKey | $sKey | ключ |
$sFieldData | $sFieldData | "сырые" (серилизированные) данные ключа |
$sInstance | $sInstance | инстанция |
{return} | array | данные |
protected function GetParamsValuesFromRawData($sKey, $sFieldData, $sInstance = self::DEFAULT_INSTANCE)
{
if ($aData = $this->UnpackValue($sFieldData) and is_array($aData)) {
/*
* Восстановить значения параметров ключа
*/
$aData = array_map(array($this, 'RetrieveParamValueFromSavedValue'), $aData);
/*
* Сохранить в кеше сессии распакованные значения
*/
$this->aSessionCache[$sInstance][$sKey] = $aData;
return $aData;
}
return array();
}
Получить массив используемых значений параметров ключа по "сырым" данным из БД
public void Init()
|
public function Init()
{
$this->Setup();
}
protected string PackValue($mValue $mValue)
| ||
$mValue | $mValue | значение |
{return} | string |
protected function PackValue($mValue)
{
return serialize($mValue);
}
Перевести данные в строковый вид (сериализировать)
protected string PrepareParamValueBeforeSaving($mValue $mValue)
| ||
$mValue | $mValue | значение |
{return} | string |
protected function PrepareParamValueBeforeSaving($mValue)
{
if (is_resource($mValue)) {
throw new Exception('Storage: your data must be scalar value, not resource!');
}
return $mValue;
}
Подготовка значения параметра перед сохранением
public mixed Remove($sParamName $sParamName, $oCaller $oCaller=NULL, string $sInstance='default')
| ||
$sParamName | $sParamName | параметр |
$oCaller | $oCaller | контекст, вызывающий метод |
$sInstance | string | инстанция |
{return} | mixed |
public function Remove($sParamName, $oCaller = null, $sInstance = self::DEFAULT_INSTANCE)
{
$sCallerName = $this->GetKeyForCaller($oCaller);
return $this->RemoveOneParam($sCallerName, $sParamName, $sInstance);
}
Удалить значение
public mixed RemoveAll($oCaller $oCaller=NULL, string $sInstance='default')
| ||
$oCaller | $oCaller | контекст, вызывающий метод |
$sInstance | string | инстанция |
{return} | mixed |
public function RemoveAll($oCaller = null, $sInstance = self::DEFAULT_INSTANCE)
{
$sCallerName = $this->GetKeyForCaller($oCaller);
return $this->RemoveAllParams($sCallerName, $sInstance);
}
Удалить все значения
protected mixed RemoveAllParams($sKey $sKey, string $sInstance='default')
| ||
$sKey | $sKey | ключ |
$sInstance | string | инстанция |
{return} | mixed |
protected function RemoveAllParams($sKey, $sInstance = self::DEFAULT_INSTANCE)
{
/*
* Удалить все значения из кеша сессии
*/
unset($this->aSessionCache[$sInstance][$sKey]);
return $this->DeleteFieldOne($sKey, $sInstance);
}
Удалить все параметры ключа
protected mixed RemoveOneParam($sKey $sKey, $sParamName $sParamName, string $sInstance='default')
| ||
$sKey | $sKey | ключ |
$sParamName | $sParamName | параметр |
$sInstance | string | инстанция |
{return} | mixed |
protected function RemoveOneParam($sKey, $sParamName, $sInstance = self::DEFAULT_INSTANCE)
{
/*
* Удалить значение из кеша сессии
*/
unset($this->aSessionCache[$sInstance][$sKey][$sParamName]);
/*
* Удалить параметр
*/
$aParamsContainer = $this->GetParamsAll($sKey, $sInstance);
unset($aParamsContainer[$sParamName]);
/*
* записать упакованные данные в строку
*/
return $this->SetFieldOne($sKey, $this->PackValue($aParamsContainer), $sInstance);
}
Удалить значение параметра для ключа
public void RemoveSmart($sParamName $sParamName, $oCaller $oCaller=NULL, string $sInstance='default')
| ||
$sParamName | $sParamName | параметр |
$oCaller | $oCaller | контекст, вызывающий метод |
$sInstance | string | инстанция |
public function RemoveSmart($sParamName, $oCaller = null, $sInstance = self::DEFAULT_INSTANCE)
{
$sCallerName = $this->GetKeyForCaller($oCaller);
$this->RemoveSmartParam($sCallerName, $sParamName, $sInstance);
}
Удалить параметр кеша сессии (без записи в хранилище)
protected void RemoveSmartParam($sKey $sKey, $sParamName $sParamName, string $sInstance='default')
| ||
$sKey | $sKey | ключ |
$sParamName | $sParamName | параметр |
$sInstance | string | инстанция |
protected function RemoveSmartParam($sKey, $sParamName, $sInstance = self::DEFAULT_INSTANCE)
{
/*
* tip: В первый запрос все данные будут загружены в сессионное хранилище и при повторном вызове они не будут затираться
*/
$this->GetParamsAll($sKey, $sInstance);
/*
* Удалить в кеше сессии
*/
unset($this->aSessionCache[$sInstance][$sKey][$sParamName]);
}
Удалить значение параметра для ключа на время сессии (без записи в хранилище)
public void Reset($oCaller $oCaller=NULL, string $sInstance='default')
| ||
$oCaller | $oCaller | контекст, вызывающий метод |
$sInstance | string | инстанция |
public function Reset($oCaller = null, $sInstance = self::DEFAULT_INSTANCE)
{
$sCallerName = $this->GetKeyForCaller($oCaller);
$this->ResetSessionCache($sCallerName, $sInstance);
}
Сбросить кеш сессии (без записи в хранилище)
protected void ResetSessionCache(null $sKey=NULL, string $sInstance='default')
| ||
$sKey | null | ключ |
$sInstance | string | инстанция |
protected function ResetSessionCache($sKey = null, $sInstance = self::DEFAULT_INSTANCE)
{
if (!is_null($sKey)) {
unset($this->aSessionCache[$sInstance][$sKey]);
} else {
unset($this->aSessionCache[$sInstance]);
}
}
Сбросить кеш сессии (без записи в хранилище)
protected mixed|null RetrieveParamValueFromSavedValue($mValue $mValue)
| ||
$mValue | $mValue | значение |
{return} | mixed|null |
protected function RetrieveParamValueFromSavedValue($mValue)
{
return $mValue;
}
Восстановление значения параметра
public mixed Set($sParamName $sParamName, $mValue $mValue, $oCaller $oCaller=NULL, string $sInstance='default')
| ||
$sParamName | $sParamName | параметр |
$mValue | $mValue | значение |
$oCaller | $oCaller | контекст, вызывающий метод |
$sInstance | string | инстанция |
{return} | mixed |
public function Set($sParamName, $mValue, $oCaller = null, $sInstance = self::DEFAULT_INSTANCE)
{
$sCallerName = $this->GetKeyForCaller($oCaller);
return $this->SetOneParam($sCallerName, $sParamName, $mValue, $sInstance);
}
Установить значение
protected mixed SetFieldOne($sKey $sKey, $sValue $sValue, string $sInstance='default')
| ||
$sKey | $sKey | ключ |
$sValue | $sValue | значение |
$sInstance | string | инстанция |
{return} | mixed |
protected function SetFieldOne($sKey, $sValue, $sInstance = self::DEFAULT_INSTANCE)
{
/*
* низкоуровневая обработка данных происходит только со строковыми значениями
*/
$sKey = (string)$sKey;
$sValue = (string)$sValue;
$sInstance = (string)$sInstance;
/*
* сбросить кеш по тегу
*/
$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG, array('storage_field_data'));
/*
* добавить запись в хранилище для ключа
*/
return $this->oMapperStorage->SetData($sKey, $sValue, $sInstance);
}
Записать в БД строку одного ключа
protected mixed SetOneParam($sKey $sKey, $sParamName $sParamName, $mValue $mValue, string $sInstance='default')
| ||
$sKey | $sKey | ключ |
$sParamName | $sParamName | параметр |
$mValue | $mValue | значение |
$sInstance | string | инстанция |
{return} | mixed |
protected function SetOneParam($sKey, $sParamName, $mValue, $sInstance = self::DEFAULT_INSTANCE)
{
/*
* Подготовить значение перед сохранением
*/
$mValueChecked = $this->PrepareParamValueBeforeSaving($mValue);
/*
* Объеденить с остальными параметрами ключа
*/
$aParamsContainer = $this->GetParamsAll($sKey, $sInstance);
$aParamsContainer[$sParamName] = $mValueChecked;
/*
* Сохранить в кеше сессии оригинальное значение
*/
$this->aSessionCache[$sInstance][$sKey][$sParamName] = $mValue;
/*
* записать упакованные данные в строку
*/
return $this->SetFieldOne($sKey, $this->PackValue($aParamsContainer), $sInstance);
}
Сохранить значение параметра для ключа
public void SetSmart($sParamName $sParamName, $mValue $mValue, $oCaller $oCaller=NULL, string $sInstance='default')
| ||
$sParamName | $sParamName | параметр |
$mValue | $mValue | значение |
$oCaller | $oCaller | контекст, вызывающий метод |
$sInstance | string | инстанция |
public function SetSmart($sParamName, $mValue, $oCaller = null, $sInstance = self::DEFAULT_INSTANCE)
{
$sCallerName = $this->GetKeyForCaller($oCaller);
$this->SetSmartParam($sCallerName, $sParamName, $mValue, $sInstance);
}
Сохранить значение параметра на время сессии (без записи в хранилище)
protected void SetSmartParam($sKey $sKey, $sParamName $sParamName, $mValue $mValue, string $sInstance='default')
| ||
$sKey | $sKey | ключ |
$sParamName | $sParamName | параметр |
$mValue | $mValue | значение |
$sInstance | string | инстанция |
protected function SetSmartParam($sKey, $sParamName, $mValue, $sInstance = self::DEFAULT_INSTANCE)
{
/*
* tip: В первый запрос все данные будут загружены в сессионное хранилище и при повторном вызове они не будут затираться
*/
$this->GetParamsAll($sKey, $sInstance);
/*
* Сохранить в кеше сессии
*/
$this->aSessionCache[$sInstance][$sKey][$sParamName] = $mValue;
}
Сохранить значение параметра для ключа на время сессии (без записи в хранилище)
protected void Setup()
|
protected function Setup()
{
$this->oMapperStorage = Engine::GetMapper(__CLASS__);
}
Настройка
public mixed Store($oCaller $oCaller=NULL, string $sInstance='default')
| ||
$oCaller | $oCaller | контекст, вызывающий метод |
$sInstance | string | инстанция |
{return} | mixed |
public function Store($oCaller = null, $sInstance = self::DEFAULT_INSTANCE)
{
$sCallerName = $this->GetKeyForCaller($oCaller);
return $this->StoreParams($sCallerName, $sInstance);
}
Записать в хранилище значения параметров из кеша сессии
protected mixed StoreParams($sKey $sKey, string $sInstance='default')
| ||
$sKey | $sKey | ключ |
$sInstance | string | инстанция |
{return} | mixed |
protected function StoreParams($sKey, $sInstance = self::DEFAULT_INSTANCE)
{
return $this->SetFieldOne($sKey, $this->PackValue($this->aSessionCache[$sInstance][$sKey]), $sInstance);
}
Записать в хранилище значения параметров для ключа из кеша сессии
protected mixed|null UnpackValue($mValue $mValue)
| ||
$mValue | $mValue | значение |
{return} | mixed|null |
protected function UnpackValue($mValue)
{
if (($mData = @unserialize($mValue)) !== false) {
return $mData;
}
return null;
}
Восстановить данные из строкового вида (десериализировать)