2014-03-27 76 views
0

我写了一个自定义类来验证荷兰BSN(美国SSN)。代码独立工作。 但是我无法将它作为扩展InputFilter的验证器工作。 我确实在我的用户模块的'module.config.php'中包含了可调用的类。Zend Framework中InputFilter的自定义验证器2

该类的代码如下

<?php 

namespace User\Validator; 
use Zend\Validator\AbstractValidator; 

class CheckBSN extends AbstractValidator { 

    //put your code here 
    const INVALID = 'BSNInvalid'; 
    protected $messageTemplates = array(
     self::INVALID => "'%value%' is an invalid BSN", 
    ); 

    public function isValid($value) { 
     if (!ctype_digit($value)) 
     { 
      $this->error(self::INVALID); 
      return false; 
     } 
     if (strlen($value) !== 9) { 
      $this->error(self::INVALID); 
      return false; 
     } 

     $pos = 8; 
     $checksum = -1 * $value[$pos]; 
     $weight = 2; 

     for ($pos = 7; $pos >= 0; $pos--) { 
      $checksum += $weight++ * $value[$pos]; 
     } 

     if (($checksum % 11) !== 0) { 
      $this->error(self::INVALID); 
      return false; 
     } 

     return true; 
    } 
} 

我想这个时候我加我为第二个验证器类则忽略它添加到下面的代码UserFilter类

$this->add(array(
    'name' => 'bsn', 
    'required' => true, 
    'filters' => array(
     array('name' => 'StringTrim'), 
     array('name' => 'StripTags'), 
    ), 
    'validators' => array(
     array('name' => 'StringLength', 
      'options' => array(
       'encoding' => 'UTF-8', 
       'min'  => 9, 
       'max'  => 9, 
      ), 
     ), 
    ) 
)); 

。当我替换第一个类时,应用程序会崩溃,出现servicenotfoundexception。

欢迎任何帮助,我正在寻找解决方案的天。是的,我确实尝试了这个网站上的建议,但他们没有一个适用于我的情况

+0

*是的,我确实尝试了这个网站上的建议,但他们没有一个似乎适用于我的情况*您是否可以编辑以列出您所说的内容以及它如何不适用?这将确保没有人浪费他们的时间建议你已经尝试过的东西。 – starsplusplus

回答

0

我认为您需要使用完全限定的验证器类名称。试试这个代码:

$this->add(array(
    'name' => 'bsn', 
    'required' => true, 
    'filters' => array(
     array('name' => 'StringTrim'), 
     array('name' => 'StripTags'), 
    ), 
    'validators' => array(
     array('name' => '\User\Validator\CheckBSN', 
      'options' => array(     
      ), 
     ), 
    ) 
)); 

我也建议你看看这些books for beginners约ZF2之一。例如,我编写的“使用Zend Framework 2”一书中有一章专门用于使用过滤器/验证程序并编写自己的过滤器/验证程序。

相关问题