2009-11-28 129 views
2

我正在編寫一個自定義驗證程序,用於檢查是否存在電子郵件,以便如果它已存在於數據庫中,表單無效。我很難找出自定義Zend_Validation類的助手路徑和命名空間。zend框架自定義驗證類

我想調用類My_Validate_EmailUnique但我不斷收到錯誤消息,例如: 有一個錯誤例外「Zend_Loader_PluginLoader_Exception」有消息「插件的名字‘My_Validate_EmailUnique’在註冊表中未找到;使用的路徑:My_Validate_:在/ var/WWW /網站/ ARC /助理/

類看起來是這樣的:

<?php 
class My_Validate_EmailUnique extends Zend_Validate_Abstract 
{ 
    const EMAIL_UNIQUE = 'notMatch'; 

有人可以幫助我,我註冊了Zend_Form的尋找自定義驗證?

+0

你有沒有在/ var /網絡/網站/ ARC /傭工文件EmailUnique.php /和你看了Db_NoRecordExists驗證?我認爲它符合你的需求:http://framework.zend.com/manual/en/zend.validate.set.html#zend.validate.Db – 2009-11-28 00:22:07

+0

也許,我錯過了Zend_Loader實際上是如何做的(或者更可能Zend_Loader_PluginLoader我有一個文件有,我有我的窗體的構造函數中執行以下操作: $的電子郵件 - > addPrefixPath(「My_Validate」,APPLICATION_PATH「/助理/」,「驗證」); 。是否Zend_Loader_PluginLoader使用不同的邏輯不是那麼Zend_Loader其中My_Validate_ *會去我的/驗證。 這聽起來像Db_NoRecordExists可能工作,但說實話,我想弄清楚這是怎麼工作的。 感謝大衛 – timpone 2009-11-28 00:41:38

回答

5

您可以直接將驗證器添加到您的表單元素。沒有必要爲此編寫自定義驗證程序。

在您的形式:



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

如果您想要定義要使用哪個'Zend_Db_Adapter',第四個參數很有用。 – chelmertz 2009-11-30 17:30:35

2

+1對於Db_NoRecordExists - 文檔有一個示例,顯示您想要執行的操作。

否則,自定義驗證器可以像常規庫類一樣加載,因此請嘗試將它放在包含路徑中。

/library/My/Validate/EmailUnique.php


您還可以添加新條目到Zend_Application_Module_Autoloader,如果你想保持它在你的應用程序文件夾,而不是你的庫:

// 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_Validate_EmailUnique in:

/application/validators/EmailUnique.php

我從來沒有註冊一個自定義的驗證器作爲插件之前,所以我不能幫你在那裏抱歉。

+0

在Db_NoRecordExists方面,你如何關閉它之間的關係插入和更新。我使用相同的操作(manageAction),並且在更新時,我不希望它被驗證。看起來我可能會做一個removeValidator,但理想情況下,我想這樣做不是在控制器,而是在模型(或可能的服務)。任何建議,如果這是正確的方法。 – timpone 2010-01-14 03:12:11