* if (!$this->Validate_Validate('url','http://livestreet.ru')) { * var_dump($this->Validate_GetErrors()); * } * * так и валидацию данных сущности: *
 * class PluginTest_ModuleMain_EntityTest extends Entity {
 *	// Определяем правила валидации
 * 	protected $aValidateRules=array(
 * 		array('login, name','string','max'=>7,'min'=>'3'),
 * 		array('title','my','on'=>'register'),
 * 	);
 *
 * 	public function ValidateMy($sValue,$aParams) {
 * 		if ($sValue!='Мега заголовок') {
 * 			return 'Ошибочный заголовок';
 * 		}
 * 		return true;
 * 	}
 * }
 *
 * // Валидация
 * $oObject=Engine::GetEntity('PluginTest_ModuleMain_EntityTest');
 * $oObject->setLogin('bolshoi login');
 * $oObject->setTitle('zagolovok');
 *
 * if ($oObject->_Validate()) {
 * 	var_dump("OK");
 * } else {
 * 	var_dump($oObject->_getValidateErrors());
 * }
 * 
* * @package engine.modules.validate * @since 1.0 */ class ModuleValidate extends Module { /** * Список ошибок при валидации, заполняется только если использовать валидацию напрямую без сущности * * @var array */ protected $aErrors=array(); /** * Инициализируем модуль * */ public function Init() { } /** * Запускает валидацию данных * * @param string $sNameValidator Имя валидатора или метода при использовании параметра $oObject * @param mixed $mValue Валидируемое значение * @param array $aParams Параметры валидации * @param null $oObject Объект в котором необходимо вызвать метод валидации * * @return bool */ public function Validate($sNameValidator,$mValue,$aParams=array(),$oObject=null) { if (is_null($oObject)) { $oObject=$this; } $oValidator=$this->CreateValidator($sNameValidator,$oObject,null,$aParams); if (($sMsg=$oValidator->validate($mValue))!==true) { $sMsg=str_replace('%%field%%',is_null($oValidator->label) ? '' : $oValidator->label,$sMsg); $this->AddError($sMsg); return false; } else { return true; } } /** * Создает и возвращает объект валидатора * * @param string $sName Имя валидатора или метода при использовании параметра $oObject * @param LsObject $oObject Объект в котором необходимо вызвать метод валидации * @param null|array $aFields Список полей сущности для которых необходимо провести валидацию * @param array $aParams Параметры * * @return mixed */ public function CreateValidator($sName,$oObject,$aFields=null,$aParams=array()) { if(is_string($aFields)) { $aFields=preg_split('/[\s,]+/',$aFields,-1,PREG_SPLIT_NO_EMPTY); } /** * Определяем список сценариев валидации */ if(isset($aParams['on'])) { if(is_array($aParams['on'])) { $aOn=$aParams['on']; } else { $aOn=preg_split('/[\s,]+/',$aParams['on'],-1,PREG_SPLIT_NO_EMPTY); } } else { $aOn=array(); } /** * Если в качестве имени валидатора указан метод объекта, то создаем специальный валидатор */ $sMethod='validate'.func_camelize($sName); if(method_exists($oObject,$sMethod)) { $oValidator=Engine::GetEntity('ModuleValidate_EntityValidatorInline'); if (!is_null($aFields)) { $oValidator->fields=$aFields; } $oValidator->object=$oObject; $oValidator->method=$sMethod; $oValidator->params=$aParams; if(isset($aParams['skipOnError'])) { $oValidator->skipOnError=$aParams['skipOnError']; } } else { /** * Иначе создаем валидатор по имени */ if (!is_null($aFields)) { $aParams['fields']=$aFields; } $sValidateName='Validator'.func_camelize($sName); $oValidator=Engine::GetEntity('ModuleValidate_Entity'.$sValidateName); foreach($aParams as $sNameParam=>$sValue) { $oValidator->$sNameParam=$sValue; } } $oValidator->on=empty($aOn) ? array() : array_combine($aOn,$aOn); return $oValidator; } /** * Возвращает факт наличия ошибки после валидации * * @return bool */ public function HasErrors() { return count($this->aErrors) ? true : false; } /** * Возвращает список ошибок после валидации * * @return array */ public function GetErrors() { return $this->aErrors; } /** * Возвращает последнюю ошибку после валидации * * @param bool $bRemove Удалять или нет ошибку из списка ошибок * @return bool|string */ public function GetErrorLast($bRemove=false) { if (!$this->HasErrors()) { return false; } if ($bRemove) { return array_pop($this->aErrors); } else { return $this->aErrors[count($this->aErrors)-1]; } } /** * Добавляет ошибку в список * * @param string $sError Текст ошибки */ public function AddError($sError) { $this->aErrors[]=$sError; } /** * Очищает список ошибок */ public function ClearErrors() { $this->aErrors=array(); } } ?>