Zend Framework 1.10.7 телефонный валидатор - PullRequest
4 голосов
/ 13 августа 2010

См. Правильный ответ для решения запрошенного вопроса.

Привет, Недавно я искал для проверки телефона в Zend Framework, который я думаю, что отсутствует компонент их Validator Framework. Поэтому я создал специальный телефонный валидатор, которым я хотел бы поделиться с вами.


Поместите приведенный ниже код в файл, доступный с помощью оператора require_once php. Здесь мы предполагаем, что этот код вставлен в файл telephoneValidator.php.

class Custom_Validator_Telephone extends Zend_Validate_Abstract
{
 const INVALID = 'This field is required';
 protected $_messageTemplates = array(
        self::INVALID => "Incorrect telephone number"
 );
 public function __construct()
 {
 }
 public function isValid($value) 
 {
  if(preg_match("/^(\+)?(\([0-9]+\)\-?\s?)*([0-9]+\-[0-9]+)*([0-9]+)*$/", trim($value))) 
  {
   return true;
  }  
  else
  {
   $this->_error(self::INVALID);
   return false;
  }
 }
}

Как его использовать: поместите ниже $ tel Zend_Element в свой объект Zend_Form с помощью метода addElement

require_once("telephoneValidator.php")
$tel = new Zend_Form_Element_Text($fieldName);
$telValidator = new Custom_Validator_Telephone();

$tel->addValidator($telValidator, true)
    ->setAllowEmpty(false)
    ->addValidator('NotEmpty', true, array('messages' => array(
                    'isEmpty' => $label.' is required')))   
 ->setLabel("Telephone Number");

$form->addElement($tel);

Сообщение об ошибке от этого валидатора можно изменить, используя setMessage метод класса Zend_Validate_Abstract

$telValidator->setMessage("%value% is not correct telephone number");
$tel->addValidator($telValidator, true)

Этот валидатор работает нормально с телефонными номерами в следующем формате

   +(92) 345-5141637
   +(92)-345-5141637 
   (92) 345-5141637
   (92)-345-5141637
   +(92)-345-5141637 
   92-345-5141637
   +92-345-5141637
   +923455141637 
   923455141637 
   (92)-(345)-5141637

Я еще не установил проверку длины на телефонном номере, но для этого потребуется создать фильтр для фильтрации цифр из входного телефонного номера с последующим использованием StringLength валидатор. Хотя я новичок в Zend Framework, я хотел бы знать, как я могу автоматически включать мои классы в пользовательские папки в папку приложения , используя автозагрузчик Zend Framework. Например, у меня есть пользовательские классы в папке MajorClasses внутри папки приложения. Скажите, пожалуйста, как автоматически включить все классы в мою папку MajorClasses, просто указав ее имя, поскольку в этой папке может быть много файлов, но Я хочу, чтобы они были включены автоматически. Возможно ли это в Zend Framework?

Ответы [ 2 ]

1 голос
/ 16 августа 2010

Этот вопрос относится к автоматической загрузке Zend Resource http://framework.zend.com/manual/en/zend.loader.autoloader-resource.html

Короче говоря, чтобы включить все файлы в определенную папку, нам нужно следовать следующим правилам.

1) Предположим, что все файлы в папке MajorClasses запускаются пользователем, то есть классом Custom_validator_Telephone , поэтому наше пространство имен для этой папки Custom . Чтобы включить файлы в эту папку, нам нужно создать экземпляр автозагрузчика ресурсов Zend

$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
          'basePath'  => "/path/to/MajorClasses",
          'namespace' => 'Custom'
      ));

2) Теперь у нас есть готовый автозагрузчик ресурсов, нам нужно добавить ресурсы к этому объекту, например, если у меня есть папка с валидаторами имен в папке MajorClasses и все файлы внутри этой папки имеют префикс Custom_Validator тогда пространство имен этой папки равно Validator , поскольку мы уже определили Custom как префикс родительского объекта ресурса.

$resourceLoader->addResourceType('validator', 'validators/', 'Validator');

Здесь

  • 1-й параметр говорит об имени добавляемого нами ресурса и используется для внутреннего распознавания.
  • 2-й параметр определяет путь к папке относительно базового пути, который мы объявили при создании экземпляра объекта автозагрузки ресурса, поэтому путь к этому ресурсу /path/to/MajorClasses/validators/.
  • 3-й параметр указывает пространство имен класса, т. Е. Оно будет объединено с пространством имен объекта ресурса (в нашем случае это Custom ), поэтому префикс полного класса до этого момента равен Custom_Validator и php файл внутри этой папки будет добавлен после этого имени класса после удаления расширения .php file

3) Теперь мы можем поместить Telephone.php в папку валидаторов и, если мы поместим вышеуказанный код в любую функцию загрузчика, например, для. _initPlaceHolders тогда мы можем создать экземпляр Custom_Validator_Telephone в любом месте нашего приложения без необходимости использования оператора require_once.

$telValidator = new Custom_Validator_Telephone();
1 голос
/ 13 августа 2010

Почему вы опубликовали свой полный материал для телефона? Ваш вопрос заключается в том, как включить автозагрузку пользовательских файлов в Zend? Правильно?

В Zend 1.10.7 вы можете добавить следующее в public / index.php НАД вашей начальной загрузкой-> запустить команду

require_once "Zend/Loader/Autoloader.php";
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace('Custom');

Вы можете зарегистрировать столько пользовательских пространств имен, сколько захотите. В этом случае Custom - это новое пространство имен, поэтому ваши классы должны называться следующим образом.

class Custom_Validator_Telephone extends Zend_Validate_Abstract

Теперь о вашей структуре каталогов, сначала задайте вопрос, какая папка MajorClasses находится внутри приложения / ??? если так, то в том же файле, что и выше, должна быть запущена функция set_include_path (). В нем вы можете указать путь к своей библиотеке, теперь мы можем добавить путь к вашему новому каталогу.

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    get_include_path(),
    APPLICATION_PATH.'/MajorClasses'.PATH_SEPARATOR,
)));

WITHIN MajorClasses folder СЕЙЧАС вам нужно будет создать каталог ДЛЯ КАЖДОГО пространства имен. Поэтому, если у вас есть пространство имен Custom, вы создаете каталог, а также вам необходимо создать каталог Validator, поскольку вы называете его таким образом, поэтому ваш путь будет.

application/MajorClasses/Custom/Validator/Telephone.php

Telephone.php должно быть именем вашего файла класса, имя файла класса всегда является последним пространством имен в имени класса.

Я что-то пропустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...