【问题标题】:Zend Form Custom Validation Path issuesZend Form 自定义验证路径问题
【发布时间】:2011-06-22 18:42:45
【问题描述】:

问题:

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

我的 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/验证/

为什么?

非常感谢。

【问题讨论】:

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


    【解决方案1】:

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

    $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() 方法代替)。

    阅读更多here

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      相关资源
      最近更新 更多