代码之家  ›  专栏  ›  技术社区  ›  Ayaz Alavi

Zend Framework 1.10.7电话验证器

  •  4
  • Ayaz Alavi  · 技术社区  · 16 年前

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

    你好, 最近我一直在搜索zend框架中的电话验证,我认为这是他们的验证器框架缺少的一个组件。因此,我创建了自定义电话验证器,我想与您分享。


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

    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\u Validate\u抽象类的方法

    $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
    

    我还没有检查电话号码的长度,但需要检查 创建筛选数字的筛选器 从输入的电话号码,然后使用 弦长 虽然我是Zend框架的新手,但我想知道如何自动将我的类包含在 自定义文件夹 里面 使用Zend框架的autoloader。例如,我在 MajorClasses文件夹 在应用程序文件夹中,请告诉我如何自动包含我的MajorClasses文件夹中的所有类只是指定其名称,因为该文件夹中可能有许多文件,但我希望它们被自动包含。 这在Zend框架中是可能的吗?

    2 回复  |  直到 13 年前
        1
  •  1
  •   Viper_Sb    16 年前

    你为什么要把你所有的电话资料都贴出来?您的问题是如何在Zend中启用自定义文件的自动加载?对吗?

    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\u include\u 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文件夹中,您现在必须为每个名称空间创建一个目录。因此,如果您有自定义的名称空间,那么您将创建目录,同时还必须创建验证器目录,因为您这样命名它,所以您的路径将是。

    application/MajorClasses/Custom/Validator/Telephone.php
    

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

        2
  •  1
  •   Ayaz Alavi    16 年前

    http://framework.zend.com/manual/en/zend.loader.autoloader-resource.html

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

    1) 假设MajorClasses文件夹下的所有文件都是由自定义类启动的 自定义验证器电话 自定义 . 为了包含此文件夹下的文件,我们需要创建zend resource autoloader的实例

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

    2) 现在我们已经准备好了资源自动加载程序,我们需要向这个对象添加资源,例如,如果我在MajorClasses文件夹中有一个名为validators的文件夹,并且这个文件夹中的所有文件都以 自定义验证器 则此文件夹的命名空间为 因为我们已经将Custom定义为父资源对象的前缀。

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

    在这里

    • 第一个参数表示我们正在添加的资源的名称,用于内部识别。
    • 第3个参数指定类的名称空间,即它将由资源对象的名称空间连接(在我们的例子中是 )至此为止,完整类的前缀是 自定义验证器 在剥离.php文件扩展名后,此文件夹中的php文件将用此类名进行后缀

    自定义验证器电话 在我们的应用程序中的任何地方,都不需要使用require\u once语句。

    $telValidator = new Custom_Validator_Telephone();
    
    推荐文章