Zend framework zend框架自定义验证类

Zend framework zend框架自定义验证类,zend-framework,Zend Framework,我正在编写一个自定义验证器,它将检查电子邮件是否存在,如果它已经存在于数据库中,则表单无效。我很难找出定制Zend_验证类的助手路径和名称空间 我想将该类称为My_Validate_EmailUnique,但我不断收到错误消息,如: 注册表中未找到错误异常“Zend_Loader_PluginLoader_exception”,消息为“Plugin by name”“My_Validate_EmailUnique”;使用的路径:My\u Validate\uvar:/www/site/arc/h

我正在编写一个自定义验证器,它将检查电子邮件是否存在,如果它已经存在于数据库中,则表单无效。我很难找出定制Zend_验证类的助手路径和名称空间

我想将该类称为My_Validate_EmailUnique,但我不断收到错误消息,如: 注册表中未找到错误异常“Zend_Loader_PluginLoader_exception”,消息为“Plugin by name”“My_Validate_EmailUnique”;使用的路径:My\u Validate\uvar:/www/site/arc/helpers/

该类如下所示:

    <?php
class My_Validate_EmailUnique extends Zend_Validate_Abstract
{
    const EMAIL_UNIQUE = 'notMatch';
+1 for-文档中有一个示例,精确显示了您想要做的事情

否则,自定义验证器可以像常规库类一样加载,所以请尝试将其放置在include路径上

/library/My/Validate/EmailUnique.php


如果要将新条目保存在应用程序文件夹中,而不是库中,您还可以将其添加到
Zend_应用程序模块_自动加载程序中:

// Bootstrap.php
protected function _initAutoloader()
{
    $autoloader = new Zend_Application_Module_Autoloader(array(
        'namespace' => 'My_',
        'basePath'  => dirname(__FILE__),
    ));

    $autoloader->addResourceType('validator', 'validators', 'Validate')

    return $autoloader;
}
然后将类
My\u Validate\u EmailUnique
放入:

/application/validators/EmailUnique.php


我以前从未将自定义验证器注册为插件,因此我无法帮助您。对不起。

您可以直接将验证器添加到表单元素中。没有必要为此编写自定义验证器

以您的形式:



$element->addValidator(new Zend_Validate_Db_NoRecordExists('mytablename', 'myemailcolumnname'));

您是否在/var/www/site/arc/helpers/中有一个文件EmailUnique.php?您是否查看过Db_NoRecordExists验证器?我认为它满足了您的需要:也许,我遗漏了Zend_Loader实际上是如何实现这一点的(或者更可能是Zend_Loader_PluginLoader。我在那里有文件,我的表单的构造函数中有以下内容:$email->addPrefixPath('my_Validate',APPLICATION_PATH./helpers/','Validate')Zend_Loader_PluginLoader是否使用了与Zend_Loader不同的逻辑,在Zend_Loader中My_Validate_*将转到My/Validate。听起来Db_NoRecordExists可能会工作,但老实说,我想弄清楚这是如何工作的。感谢David,如果您想定义使用哪个
Zend_Db_适配器
,第四个参数很有用oRecordExists,如何在插入和更新之间关闭它。我使用相同的操作(manageAction),并且在更新时,我不希望对其进行验证。看起来我可能能够执行removeValidator,但理想情况下,我不希望在控制器中执行此操作,而是在模型(或可能的服务)中执行此操作.这是否是正确的方法,请提供任何建议。