繁体   English   中英

Zend Framework 1.10.7电话验证器

[英]Zend Framework 1.10.7 telephone validator

请参阅正确答案以获取所请求问题的解决方案。

嗨,最近,我一直在zend框架中搜索电话验证,我认为这是其Validator框架中缺少的组件。 因此,我创建了自定义电话验证器,希望与您分享。


将下面的代码放在一个require_once php语句可访问的文件中。 在这里,我们假设此代码粘贴在文件phoneValidator.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;
  }
 }
}

如何使用:使用addElement方法将$ tel Zend_Element放在您的Zend_Form对象中

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);

可以使用Zend_Validate_Abstract类的setMessage方法修改来自此验证器的错误消息

$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框架的新手,但我想知道如何使用Zend框架的自动加载器自动将类包含在应用程序文件夹中的自定义文件 夹中 例如,我在应用程序文件夹的MajorClasses文件夹中有我的自定义类,请告诉我自动指定我的MajorClasses文件夹中的所有类的方法,只需指定其名称,因为该文件夹中可能有很多文件,但我希望包含它们自动。 在Zend框架中这可能吗?

您为什么张贴完整的电话资料? 您的问题就是如何在Zend中启用自定义文件的自动加载? 对?

在Zend 1.10.7中,您可以在bootstrap-> run命令上方将以下内容添加到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文件夹是否位于application / ???中? 如果可以,则在与上述相同的文件中,应该正在运行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,
)));

在MajorClasses文件夹中,您现在必须为每个命名空间创建目录。 因此,如果您具有名称空间Custom,则可以创建目录,还必须创建Validator目录,因为要像这样命名它,所以路径应该是。

application/MajorClasses/Custom/Validator/Telephone.php

Telephone.php应该是您的类文件的名称,类文件名始终是类名中的最后一个名称空间。

我有想念吗?

此问题来自Zend资源自动加载http://framework.zend.com/manual/en/zend.loader.autoloader-resource.html

简而言之,为了包括特定文件夹下的所有文件,我们需要遵循以下规则。

1)假设MajorClasses文件夹下的所有文件都是由Custom启动的,即Custom_validator_Telephone类,因此此文件夹的命名空间为Custom 为了在此文件夹下包含文件,我们需要创建一个zend资源自动加载器实例

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

2)现在我们已经准备好资源自动加载器,我们需要向该对象添加资源,例如,如果我在MajorClasses文件夹中有名称验证器的文件夹,并且该文件夹中的所有文件都以Custom_Validator开头,则此文件夹的命名空间为Validator,因为已经将“自定义”定义为父资源对象的前缀。

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

这里

  • 第一个参数表示要添加的资源名称,用于内部识别。
  • 第二个参数定义相对于实例化资源自动加载器对象时声明的基本路径的文件夹路径,因此该资源的路径为/ path / to / MajorClasses / validators /。
  • 第三个参数指定类的名称空间,即它将由资源对象的名称空间(在我们的情况下为Custom )串联,因此, 到目前为止 ,完整类的前缀为Custom_Validator,并且剥离后此文件夹内的php文件将使用该类名称后缀.php文件扩展

3)现在我们可以将Telephone.php放在验证器文件夹中,如果将上面的代码放在bootstrap的任何函数中,例如_initPlaceHolders,那么我们可以在应用程序中的任何位置创建Custom_Validator_Telephone的实例,而无需使用require_once语句。

$telValidator = new Custom_Validator_Telephone();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM