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

时间:2015-01-20 03:02:31

标签: php validation zend-framework

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

这是我的自定义验证器类。我不确定这是否是正确的约定,但我把它放在我的库/ QA文件夹中,因为我可以使用composer autoload自动加载所有内容:

<?php

class QA_Validators_TagRange extends Zend_Validate_Abstract
{
    ...
}

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

<?php

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

        ...
    }
}

我的新自定义验证器如何适合这个?感谢

1 个答案:

答案 0 :(得分:1)

我认为,你可以通过两种方式实现,

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

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

下查看

OR

$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()方式更容易