Entity

Package engine
Inheritance abstract class Entity » LsObject
Subclasses EntityORM, ModuleBlog_EntityBlog, ModuleBlog_EntityBlogUser, ModuleComment_EntityComment, ModuleComment_EntityCommentOnline, ModuleFavourite_EntityFavourite, ModuleFavourite_EntityTag, ModuleGeo_EntityGeo, ModuleGeo_EntityTarget, ModuleNotify_EntityTask, ModuleStream_EntityEvent, ModuleSubscribe_EntitySubscribe, ModuleTalk_EntityTalk, ModuleTalk_EntityTalkUser, ModuleTopic_EntityTopic, ModuleTopic_EntityTopicPhoto, ModuleTopic_EntityTopicQuestionVote, ModuleTopic_EntityTopicRead, ModuleTopic_EntityTopicTag, ModuleUser_EntityChangemail, ModuleUser_EntityField, ModuleUser_EntityFriend, ModuleUser_EntityInvite, ModuleUser_EntityNote, ModuleUser_EntityReminder, ModuleUser_EntitySession, ModuleUser_EntityUser, ModuleValidate_EntityValidator, ModuleVote_EntityVote, ModuleWall_EntityWall
Since 1.0
Source Code /engine/classes/Entity.class.php
Абстрактный класс сущности. При запросе к базе данных удобно возвращать не просто массив данных, а данные в виде специального объекта - Entity. Основные методы такого объекта делятся на два вида: get-методы и set-методы. Первые получают свойство объекта по его имени, а вторые устанавливают. Сущности поддерживает "магические" методы set* и get* , например
$oEntity->getMyProperty()
вернет данные по ключу/полю my_property

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
_aData array Данные сущности, на этот массив мапятся методы set* и get* Entity
aValidateErrors array Список ошибок валидации в разрезе полей, например Entity
aValidateRules array Список правил валидации полей Entity
sPrimaryKey null|string Имя поля с первичным ключом в БД Entity
sValidateScenario string Сценарий валиадции полей Entity

Public Methods

Hide inherited methods

MethodDescriptionDefined By
Init() Метод инициализации сущности, вызывается при её создании Entity
_Validate() Выполняет валидацию данных сущности Entity
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля Entity
__construct() Если передать в конструктор ассоциативный массив свойств и их значений, то они автоматом загрузятся в сущность Entity
_addValidateError() Добавляет для поля ошибку в список ошибок Entity
_clearValidateErrors() Очищает список всех ошибок или для конкретного поля Entity
_createValidators() Создает и возвращает список валидаторов для сущности Entity
_getData() Получает массив данных сущности Entity
_getDataArray() Рекурсивное преобразование объекта и вложенных объектов в массив Entity
_getDataOne() Возвращает данные по конкретному полю Entity
_getPrimaryKey() Получение первичного ключа сущности (ключ, а не значение!) Entity
_getPrimaryKeyValue() Возвращает значение первичного ключа/поля Entity
_getValidateError() Возвращает первую ошибку для поля или среди всех полей Entity
_getValidateErrors() Возвращает список ошибок для всех полей или одного поля Entity
_getValidateScenario() Возвращает текущий сценарий валидации Entity
_getValidators() Возвращает список валидаторов с учетом текущего сценария Entity
_hasValidateErrors() Проверяет есть ли ошибки валидации Entity
_setData() Устанавливает данные сущности Entity
_setValidateScenario() Устанавливает сценарий валидации Entity

Property Details

_aData property
protected array $_aData;

Данные сущности, на этот массив мапятся методы set* и get*

aValidateErrors property
protected array $aValidateErrors;

Список ошибок валидации в разрезе полей, например

array(
	'title' => array('error one','error two'),
	'name' => array('error one','error two'),
)

aValidateRules property
protected array $aValidateRules;

Список правил валидации полей

See Also

sPrimaryKey property
protected null|string $sPrimaryKey;

Имя поля с первичным ключом в БД

sValidateScenario property
protected string $sValidateScenario;

Сценарий валиадции полей

Method Details

Init() method
public void Init()
Source Code: /engine/classes/Entity.class.php#84 (show)
public function Init() {

}

Метод инициализации сущности, вызывается при её создании

_Validate() method
public bool _Validate(null|array $aFields=NULL, bool $bClearErrors=true)
$aFields null|array Список полей для валидации, если null то по всем полям
$bClearErrors bool Очищать или нет стек ошибок перед валидацией
{return} bool
Source Code: /engine/classes/Entity.class.php#211 (show)
public function _Validate($aFields=null$bClearErrors=true) {
    if(
$bClearErrors) {
        
$this->_clearValidateErrors();
    }
    foreach(
$this->_getValidators() as $validator) {
        
$validator->validateEntity($this,$aFields);
    }
    return !
$this->_hasValidateErrors();
}

Выполняет валидацию данных сущности Если $aFields=null, то выполняется валидация по всем полям из $this->aValidateRules, иначе по пересечению

__call() method
public mixed __call(string $sName, array $aArgs)
$sName string Имя метода
$aArgs array Аргументы
{return} mixed
Source Code: /engine/classes/Entity.class.php#153 (show)
public function __call($sName,$aArgs) {
    
$sType=strtolower(substr($sName,0,3));
    if (!
strpos($sName,'_') and in_array($sType,array('get','set'))) {
        
$sKey=func_underscore(substr($sName,3));
        if (
$sType=='get') {
            if (isset(
$this->_aData[$sKey])) {
                return 
$this->_aData[$sKey];
            } else {
                if (
preg_match('/Entity([^_]+)/',get_class($this),$sModulePrefix)) {
                    
$sModulePrefix=func_underscore($sModulePrefix[1]).'_';
                    if (isset(
$this->_aData[$sModulePrefix.$sKey])) {
                        return 
$this->_aData[$sModulePrefix.$sKey];
                    }
                }
            }
            return 
null;
        } elseif (
$sType=='set' and array_key_exists(0,$aArgs)) {
            
$this->_aData[$sKey]=$aArgs[0];
        }
    } else {
        return 
Engine::getInstance()->_CallModule($sName,$aArgs);
    }
}

Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля Также производит обработку методов set* и get*

__construct() method
public void __construct(array|false $aParam=false)
$aParam array|false Ассоциативный массив данных сущности
Source Code: /engine/classes/Entity.class.php#77 (show)
public function __construct($aParam false) {
    
$this->_setData($aParam);
    
$this->Init();
}

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

_addValidateError() method
public void _addValidateError(string $sField, string $sError)
$sField string Поле сущности
$sError string Сообщение об ошибке
Source Code: /engine/classes/Entity.class.php#312 (show)
public function _addValidateError($sField,$sError) {
    
$this->aValidateErrors[$sField][]=$sError;
}

Добавляет для поля ошибку в список ошибок

_clearValidateErrors() method
public void _clearValidateErrors(null|string $sField=NULL)
$sField null|string Поле сущности
Source Code: /engine/classes/Entity.class.php#320 (show)
public function _clearValidateErrors($sField=null) {
    if(
$sField===null) {
        
$this->aValidateErrors=array();
    } else {
        unset(
$this->aValidateErrors[$sField]);
    }
}

Очищает список всех ошибок или для конкретного поля

_createValidators() method
public array _createValidators()
{return} array
Source Code: /engine/classes/Entity.class.php#251 (show)
public function _createValidators() {
    
$aValidators=array();
    foreach(
$this->aValidateRules as $aRule) {
        if(isset(
$aRule[0],$aRule[1])) {
            
$aValidators[]=$this->Validate_CreateValidator($aRule[1],$this,$aRule[0],array_slice($aRule,2));
        } else {
            throw new 
Exception(get_class($this).' has an invalid validation rule');
        }
    }
    return 
$aValidators;
}

Создает и возвращает список валидаторов для сущности

_getData() method
public array _getData(array|null $aKeys=array ( ))
$aKeys array|null Список полей, данные по которым необходимо вернуть, если не передан, то возвращаются все данные
{return} array
Source Code: /engine/classes/Entity.class.php#105 (show)
public function _getData($aKeys=array()) {
    if(!
is_array($aKeys) or !count($aKeys)) return $this->_aData;

    
$aReturn=array();
    foreach (
$aKeys as $key) {
        if(
array_key_exists($key,$this->_aData)) {
            
$aReturn[$key] = $this->_aData[$key];
        }
    }
    return 
$aReturn;
}

Получает массив данных сущности

_getDataArray() method
public array _getDataArray()
{return} array
Source Code: /engine/classes/Entity.class.php#133 (show)
public function _getDataArray() {
    
$aResult = array();
    foreach (
$this->_aData as $sKey => $sValue) {
        if (
is_object($sValue) && $sValue instanceOf Entity) {
            
$aResult[$sKey] = $sValue->_getDataArray();
        } else {
            
$aResult[$sKey] = $sValue;
        }
    }
    return 
$aResult;
}

Рекурсивное преобразование объекта и вложенных объектов в массив

_getDataOne() method
public null|mixed _getDataOne(string $sKey)
$sKey string Название поля, например
'my_property'
{return} null|mixed
Source Code: /engine/classes/Entity.class.php#122 (show)
public function _getDataOne($sKey) {
    if(
array_key_exists($sKey,$this->_aData)) {
        return 
$this->_aData[$sKey];
    }
    return 
null;
}

Возвращает данные по конкретному полю

_getPrimaryKey() method
public null|string _getPrimaryKey()
{return} null|string
Source Code: /engine/classes/Entity.class.php#182 (show)
public function _getPrimaryKey() {
    if (!
$this->sPrimaryKey) {
        if (isset(
$this->_aData['id'])) {
            
$this->sPrimaryKey 'id';
        } else {
            
// Получение primary_key из схемы бд (пока отсутствует)
            
$this->sPrimaryKey 'id';
        }
    }

    return 
$this->sPrimaryKey;
}

Получение первичного ключа сущности (ключ, а не значение!)

_getPrimaryKeyValue() method
public mixed|null _getPrimaryKeyValue()
{return} mixed|null
Source Code: /engine/classes/Entity.class.php#199 (show)
public function _getPrimaryKeyValue() {
    return 
$this->_getDataOne($this->_getPrimaryKey());
}

Возвращает значение первичного ключа/поля

_getValidateError() method
public string|null _getValidateError(null|string $sField=NULL)
$sField null|string Поле сущности
{return} string|null
Source Code: /engine/classes/Entity.class.php#297 (show)
public function _getValidateError($sField=null) {
    if (
$sField===null) {
        foreach(
$this->_getValidateErrors() as $sFieldKey=>$aErros) {
            return 
reset($aErros);
        }
    } else {
        return isset(
$this->aValidateErrors[$sField]) ? reset($this->aValidateErrors[$sField]) : null;
    }
}

Возвращает первую ошибку для поля или среди всех полей

_getValidateErrors() method
public array _getValidateErrors(null|string $sField=NULL)
$sField null|string Поле сущности, если нет, то возвращается для всех полей
{return} array
Source Code: /engine/classes/Entity.class.php#283 (show)
public function _getValidateErrors($sField=null) {
    if(
$sField===null) {
        return 
$this->aValidateErrors;
    } else {
        return isset(
$this->aValidateErrors[$sField]) ? $this->aValidateErrors[$sField] : array();
    }
}

Возвращает список ошибок для всех полей или одного поля

_getValidateScenario() method
public string _getValidateScenario()
{return} string
Source Code: /engine/classes/Entity.class.php#332 (show)
public function _getValidateScenario() {
    return 
$this->sValidateScenario;
}

Возвращает текущий сценарий валидации

_getValidators() method
public array _getValidators(null|string $sField=NULL)
$sField null|string Поле сущности для которого необходимо вернуть валидаторы, если нет, то возвращается для всех полей
{return} array
Source Code: /engine/classes/Entity.class.php#227 (show)
public function _getValidators($sField=null) {
    
$aValidators=$this->_createValidators();

    
$aValidatorsReturn=array();
    
$sScenario=$this->_getValidateScenario();
    foreach(
$aValidators as $oValidator) {
        
/**
         * Проверка на текущий сценарий
         */
        
if($oValidator->applyTo($sScenario)) {
            if(
$sField===null || in_array($sField,$oValidator->fields,true)) {
                
$aValidatorsReturn[]=$oValidator;
            }
        }
    }
    return 
$aValidatorsReturn;
}

Возвращает список валидаторов с учетом текущего сценария

_hasValidateErrors() method
public bool _hasValidateErrors(null|string $sField=NULL)
$sField null|string Поле сущности, если нет, то проверяется для всех полей
{return} bool
Source Code: /engine/classes/Entity.class.php#269 (show)
public function _hasValidateErrors($sField=null) {
    if(
$sField===null) {
        return 
$this->aValidateErrors!==array();
    } else {
        return isset(
$this->aValidateErrors[$sField]);
    }
}

Проверяет есть ли ошибки валидации

_setData() method
public void _setData(array $aData)
$aData array Ассоциативный массив данных сущности
Source Code: /engine/classes/Entity.class.php#92 (show)
public function _setData($aData) {
    if(
is_array($aData)) {
        foreach (
$aData as $sKey => $val)    {
            
$this->_aData[$sKey] = $val;
        }
    }
}

Устанавливает данные сущности

_setValidateScenario() method
public void _setValidateScenario(string $sValue)
$sValue string
Source Code: /engine/classes/Entity.class.php#342 (show)
public function _setValidateScenario($sValue) {
    
$this->sValidateScenario=$sValue;
}

Устанавливает сценарий валидации Если использовать валидацию без сценария, то будут использоваться только те правила, где нет никаких сценариев, либо указан пустой сценарий '' Если указать сценарий, то проверка будет только по правилом, где в списке сценарией есть указанный