Zend Framework 1 > 好的,我已经编写了一个自定义验证器。我把它放在哪里?我的 Zend_Form 如何包含它?

Zend Framework 1 > OK, I've written a custom validator. Where do I put it? How does my Zend_Form include it?

我已经编写了自己的 Zend 框架自定义验证程序。但是文档似乎没有告诉我 1) 将它保存在哪里,以及 2) 如何将它包含在我的 Zend_Form 中。 Zend中没有这样的约定吗?任何人都可以建议:

这是我的自定义验证器 class。我不确定这是否是正确的约定,但我已将它放在我的 library/QA 文件夹中,因为我可以使用 composer autoload:

自动加载那里的所有内容
<?php

class QA_Validators_TagRange extends Zend_Validate_Abstract
{
    ...
}

接下来,我有一个文件 form/questionsForm.php,其中包含以下 class:

<?php

class QuestionForm extends Zend_Form
{
    public function init()
    {
        $this->addElement('text', 'tags', array(
            'label'      => 'Tags',
            'required'   => true,
            'filters' => array(
                'StringTrim',
            ),
            'validators' => array(
                'NotEmpty'
            )
        ));

        ...
    }
}

我的新自定义验证器如何适应它?谢谢

我认为,您可以通过两种方式做到这一点,

$yourValidator = new QA_Validators_TagRange();  
$yourField->addValidator($yourValidator, true); 

这应该在 library\QA\Validator\TagRange.php

下查看

$yourField->addPrefixPath('QA_Validators', 'QA/Validators/', 'validate');        
$yourField->addValidator('TagRange', true); 

这应该在 library\QA\Validator\TagRange.php

下查看

更新 您还可以按照您在问题中添加的样式添加验证器,如:

$this->addElement('text', 'tags', array(
    'label'      => 'Tags',
    'required'   => true,
    'filters' => array(
        'StringTrim',
    ),
    'validators' => array(
        array('TagRange', true, array(
            'messages' => array(….)  
     ))
    )
));

但是对于这种添加验证器的方式,我认为你需要设置

$form->addElementPrefixPaths($elementPrefixPaths);。我认为 addValidator() 方法更简单