0

问题:

在注册表中找不到名为“垃圾邮件”的插件;使用的路径: 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/

为什么 ?

非常感谢。

4

1 回答 1

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.

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

在这里阅读更多。

您的路径是“应用程序/验证器”,但最好遵循 ZF 关于类命名和路径镜像的约定;因此,您应该将您的验证器放在诸如“My/Validate”之类的目录中。您应该在您开发的所有自定义 ZF 扩展(过滤器、帮助程序、插件等)上遵循此约定。从长远来看,这将使您的生活更轻松。另外,作为最后的建议,不要使用“My_”作为你的类前缀,使用更私人的东西,比如“Mem_”(考虑到你的昵称)。

于 2011-06-23T00:11:43.330 回答