Zend表单自定义验证路径问题

时间:2011-06-22 18:42:45

标签: zend-framework zend-form zend-validate

问题:

  

未找到名称为“垃圾邮件”的插件   登记处;使用路径:   Zend_Validate_:Zend / Validate /

我的bootstrap.php文件中有这个(它不是一个类):

include_once 'config_root.php';
set_include_path ( $PATH );

require_once 'Initializer.php';
require_once "Zend/Loader.php";
require_once 'Zend/Loader/Autoloader.php';

// Set up autoload.
$loader = Zend_Loader_Autoloader::getInstance ();
$loader->setFallbackAutoloader ( true );
$loader->suppressNotFoundWarnings ( false );

//resource Loader
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
                'basePath' => APPLICATION_PATH,
                'namespace' => '',
            ));

$resourceLoader->addResourceType('validate', 'validators/', 'My_Validate_');

$loader->pushAutoloader($resourceLoader);

我已将这个名为Spam.php的文件命名为:

应用/验证/ Spam.php

class My_Validate_Spam extends Zend_Validate_Abstract {

在我有的表单类上:

//HONEY POT
        $this->addElement(
                'text', 'honeypot', array(
                    'label' => 'Honeypot',
                    'required' => false,
                    'class' => 'honeypot',
                    'decorators' => array('ViewHelper'),
                    'validators' => array(
                        array(
                            'validate' => 'Spam'
                        )
                    )
                )
        );

有了这一切,我得到了:

  

未找到名称为“垃圾邮件”的插件   登记处;使用路径:   Zend_Validate_:Zend / Validate /

为什么?

非常感谢。

1 个答案:

答案 0 :(得分:0)

您必须将自定义验证程序所在的目录添加到表单元素前缀路径中。例如:

$elementPrefixPaths = 
    array(
        array(
            array(
                'prefix' => 'My_Validate_', 
                'path' => 'My/Validate', // 'application/validators' in your case
                'type' => 'validate',
            )
        )
    );
$form->addElementPrefixPaths($elementPrefixPaths);
// or, if your're inside the form, 
// $this->addElementPrefixPaths($elementPrefixPaths)
// before any elements make use of the validator.

'path'应该在include路径中。您必须对自定义过滤器执行相同操作。自定义装饰器和元素也有类似的方法(使用方法setPrefixPaths()代替)。

了解更多here

您的路径是'application / validators',但最好遵循类命名和路径镜像的ZF约定;因此,您应该将验证器放在诸如“我/验证”之类的目录中。您应该对您开发的所有自定义ZF扩展(过滤器,帮助程序,插件等)遵循此约定。从长远来看,它将使您的生活更轻松。另外,作为最终建议,不要使用“My_”作为您的类前缀,使用更个性化的内容,例如“Mem_”(考虑您的昵称)。