$valid_data = array('name' => array('Alpha' => $profile_data['name']),
'login' => array('Alnum' => $profile_data['surname'])
);
if ($this->_helper->validate->isValid($valid_data, $errors) === true)
{
// делаем что либо
}
Zend_Controller_Action_HelperBroker::addPath(LIBPATH.'/My/Helper/Action', 'My_Helper_Action');
<?php
require_once 'Zend/Controller/Action/Helper/Abstract.php';
require_once 'Zend/Validate.php';
class My_Helper_Action_Validate extends Zend_Controller_Action_Helper_Abstract
{
protected $validator;
public function direct()
{
}
/**
* Возвращает объект валидатора
*
* @param unknown_type $validator_name имя требуемого валидатора
* @return unknown
*/
public function getValidator($validator_name){
if (!preg_match('/My/', $validator_name)){
require_once('Zend/Validate/'.$validator_name.'.php');
$validator = 'Zend_Validate_'.$validator_name;
}
else {
require_once('My/Validate/'.$validator_name.'.php');
$validator = 'My_Validate_'.$validator_name;
}
return new $validator();
}
/**
* Проверяет массив данных в соотвествии с заданными валидаторами
*
* @param array $fields массив с данными для проверки и именами валидаторов
* array('some_field_name' => array('validator_name' => $value));
* @param array $errors массив с ошибками
* @return bool в случае успешной валидации вернет true
*/
public function isValid($fields, &$errors){
$count_error = count($errors);
// извлекаем из массива поле и валидатор, которым его надо обработать
foreach ($fields as $values){
foreach ($values as $validator_name => $value) {
if (!empty($value)){
$validator = $this->getValidator($validator_name);
if (!$validator->isValid($value)) {
array_push($errors, 'Ошибка валидации: '.array_shift($validator->getMessages()));
}
}
}
}
// число ошибок на входе равно числу ошибок после валидации?
if (count($errors) == $count_error) {return true;}
else { return false;}
}
}
$errors = array();
<?php
require_once 'Zend/Validate/Interface.php';
require_once 'Zend/Validate/StringLength.php';
/**
* Допустим логин длинной от 3 до 36 символов
* и логин в котором есть только цифры, буквы и "-", "_"
*
*/
class My_Validate_Mylogin implements Zend_Validate_Interface
{
protected $_messages;
public function isValid($value)
{
$this->_messages = array();
$validatorStringLength = new Zend_Validate_StringLength(3, 36);
$pattern = "/^[-_a-zA-Z0-9]+$/";
if ($validatorStringLength->isValid($value))
{
if(preg_match($pattern, $value)) {return true;}
else {$this->_messages[] = "неккоректное значение логина"; return false;}
} else
$this->_messages[] = "длина логина не верна"; return false;
}
public function getMessages()
{
return $this->_messages;
}
public function getErrors(){
return array();
}
}
$valid_data = array('name' => array('Alpha' => $profile_data['name']),
'surname' => array('Alpha' => $profile_data['surname']),
'fatname' => array('Alpha' => $profile_data['fatname']),
'birthday' => array('Mydate' => $profile_data['birthday']),
'phone1' => array('Myphone' => $profile_data['phone1']),
'pass' => array('Mypass' => $profile_data['pass']));
$this->_helper->validate->isValid($valid_data, $errors)
if (count($errors) > 0) {
// Ошибки на вывод
$this->view->assign("errors", $errors);
} else {
// Работа с моделью
}
2009 © Olmish.com