2010-09-10 61 views
0

我開始編寫一個ZF(v1.10.3)應用程序,並選擇使用Zend_Config_Ini來生成我的Zend_Form對象。這一切都很好,直到我不得不測試相同的密碼輸入。這是運作錯誤,現在部分:使用.ini配置Zend_Form密碼確認 - 可以完成嗎?

elements.password.type = password 

elements.password2.type = password 
elements.password2.options.validators.identical.validator = "Identical" 
elements.password2.options.validators.identical.options.token = password 

而是比較這兩個元素的值,它比較密碼2的對文本字符串「密碼」值。所以任何密碼除了「密碼」給我以下驗證錯誤:

The token 'password' does not match the given token '*******' 

有沒有正確的方法來做到這一點? Zend_Validate_Identical和Zend_Config_Ini的唯一通過Google發現的例子來自德國的一個網站,並且有人似乎推薦了與上述失敗代碼完全相同的「解決方案」。

我知道在PHP代碼中有很多方法可以做到這一點,但是我現在已經非常重視INI配置,並且我寧願不放棄它或者例外,除非我絕對必須。

[編輯]這裏是我的全部newUserForm.ini:

method = "post" 
id = "newUserForm" 
accept-charset = "utf-8" 

elements.username.type = "text" 
elements.username.options.label = "Username" 
elements.username.options.required = true 
elements.username.options.validators.alnum = "Alnum" 
elements.username.options.validators.strlen.validator = "StringLength" 
elements.username.options.validators.strlen.options.min = "3" 
elements.username.options.validators.strlen.options.max = "32" 

elements.email.type = "text" 
elements.email.options.label = "Email address" 
elements.email.options.required = true 
elements.email.options.validators.email.validator = "EmailAddress" 

elements.password.type = "password" 
elements.password.options.label = "Password" 
elements.password.options.required = true 
elements.password.options.validators.strlen.validator = "StringLength" 
elements.password.options.validators.strlen.options.min = "6" 

elements.password2.type = "password" 
elements.password2.options.label = "Password (confirm)" 
elements.password2.options.required = true 
elements.password2.options.validators.identical.validator = "Identical" 
elements.password2.options.validators.identical.options.token = password 

elements.submit.type = "submit" 
elements.submit.options.label = "Submit" 

這裏是我的控制器操作:

public function indexAction() 
{ 
    $formConfig = new Zend_Config_Ini(APPLICATION_PATH.'/configs/newUserForm.ini'); 
    $newUserForm = new Zend_Form($formConfig); 
    $request = $this->getRequest(); 
    if ($request->isPost()) { 
     if ($newUserForm->isValid($request->getPost())) { 
      // create new user here 
      $this->_helper->redirector('index', 'index'); 
     } 
    } 
    $this->view->newUserForm = $newUserForm; 
} 

回答

3

我只是嘗試這樣做使用的東西類似於你的代碼,它似乎工作正常。我正在使用ZF 1.10.6。所以要麼在這兩個版本之間存在一個問題已經解決了(但在錯誤跟蹤器中我看不到任何類似的東西),或者代碼中存在其他問題導致問題。你能發佈完整的ini文件和表單代碼嗎?

這是我的簡約測試腳本,供參考。也許你可以看到,如果這對你的作品:

<?php 
$view = new Zend_View(); 

$config = new Zend_Config_Ini('formtest.ini'); 
$form = new Zend_Form($config->user->signup); 
$form->setView($view); 

if (!empty($_POST)) { 
    var_dump($form->isValid($_POST)); 
    var_dump($form->getValues()); 
} 

echo $form; 

formtest.ini:

user.signup.action = "" 
user.signup.method = "post" 
user.signup.elements.password.type = password 
user.signup.elements.password2.type = password 
user.signup.elements.password2.options.validators.identical.validator = "Identical" 
user.signup.elements.password2.options.validators.identical.options.token = password 
user.signup.elements.submit.type = "submit" 

在這個測試中,表單驗證只有密碼2是空白的,或者這兩個領域相匹配。另外,如果他們不匹配,我得到的錯誤是「兩個給定的標記不匹配」,這不完全匹配你的。不確定這是否相關。

+0

我試過你的INI,但仍然有同樣的問題。我上面發佈了更多的代碼,但我開始認爲框架升級是按順序進行的。 – 2010-09-11 03:25:52

+0

是的,我只是試着用你的確切的ini文件,這對我來說也很好。所以嘗試升級ZF看看是否有幫助。 – 2010-09-11 08:32:25

+0

我恰好有一些老版本的ZF,所以我只是用1.10.2試了我的測試腳本,然後我遇到了和你一樣的問題。所以我有信心升級ZF將解決您的問題。 – 2010-09-11 08:43:20