2011-06-22 35 views
0

问题:Zend的形式自定义验证和路径问题

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

在表格I类有:

//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/

为什么?

非常感谢。

回答

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

了解更多here

你的路径是'application/validators',但最好按照ZF约定的类命名和路径镜像;因此你应该把你的验证器放在一个目录中,比如'My/Validate'。你应该遵循这个惯例来开发你开发的所有定制ZF扩展(过滤器,帮助器,插件等)。从长远来看,它会让你的生活更轻松。另外,作为最终的建议,不要使用“My_”作为你的类前缀,而应该使用更个人的东西,比如“Mem_”(考虑你的昵称)。