2011-09-11 68 views
0

我有一個表格,有兩個選擇框:國家和城市,城市取決於所選國家。 請注意,使用Ajax選擇國家時,城市字段會動態填充。Zend表格:相關字段驗證

到目前爲止,我擴展了Zend_Form_Element_Select覆蓋了城市選擇框中的isValid(),我將使用$context參數來獲取所選國家並檢查該城市是否有效(針對該國家)。

如果國家驗證失敗,我想跳過城市驗證。例如,某人可以向國家/地區注入不好的值(並且國家驗證將失敗),並且我的城市驗證不應該發生,也不會對db執行該查詢,但它不應該通過驗證。

我該如何做到這一點?

回答

3

覆蓋Form類中的isValid()setDefaults()方法,以便在設置country元素時填充城市元素。

function isValid($data) { 
    if (isset($data['country'])) { 
     $this->populateCity($data['country']); 
    } 
    return parent::isValid($data); 
} 

function setDefault($name, $value) { 
    if ('country' === $value) { 
     $this->populateCity($value); 
    } 
    return parent::setDefault($name, $value); 
} 
+0

這樣我就不會跳過對數據庫的查詢來選擇國家無效時的城市。但是你真的給了我一個好主意!只有在country元素有效時才填充城市元素會更好嗎?可以嗎? – s3v3n

+0

我有解決方案。我將編輯此答案以發佈實際解決了我的問題的代碼,並在稍後接受它:) – s3v3n

+0

我仍然沒有時間編輯此答案,因此我檢查此答案爲已接受。我只使用了isValid()部分。無論如何感謝! – s3v3n