2009-11-19 70 views
4

我有一個用戶可以創建一個帳戶的表單。用戶名列在數據庫中是唯一的。如果用戶嘗試使用重複的用戶名創建帳戶,則會引發異常。這看起來很醜陋。Zend表單:如何創建一個用於檢查唯一用戶名的「創建賬戶表單」?

我正在考慮在插入數據庫之前進行某種檢查(可能使用ajax)以查看是否已經使用了所需的用戶名。如果事實證明用戶名已被佔用,我想將表單上的用戶名字段設置爲錯誤狀態並指定要顯示的錯誤消息。

我怎樣才能做到這一點?

更新:Zend_Validator_Db_NoRecordExists適用於這類事情。這裏是我最後得到的:

// inside my create account form 
$this->addElement('text', 'username', array(
    'label'  => 'Username:', 
    'required' => true, 
    'filters' => array('StringTrim'), 
    'validators' => array(
     array('StringLength', false, array(2, 50)), 
     array('Db_NoRecordExists', false, array(
      'table' => 'users', 
      'field' => 'username' 
     )) 
    ) 
)); 
+0

沒有在你的問題的足夠信息。你在做什麼處理?當用戶點擊提交時,您是否將用戶名字段的值「post-ing」到發佈整個表單的相同URI?您必須在控制器中包含附加邏輯,或者使用單獨的操作僅檢查此字段。 – 2009-11-21 09:32:05

+0

@Goran,我添加了一個更新,顯示我在我的控制器中正在做什麼。 – Andrew 2009-11-21 23:58:29

回答

0

你應該這樣做檢查你自己的服務器端。你不應該讓數據庫處理這個。然後你可以產生一個很好的錯誤。無論客戶端/ ajax檢查如何,您都應該這樣做。

要執行Ajax檢查,請創建一個返回0或1的控制器。繞過視圖和佈局代碼的簡單方法就是exit();在控制器的末尾。當您進行Ajax調用時,您爲結果分配一個處理程序。該處理程序讀取結果並確定是否顯示消息。

相關問題