2009-09-14 38 views
0

我只有最近纔開始網絡編程,我非常驚訝,儘管我使用的是驗證庫,但仍然只有20-30行代碼用於驗證,不包括錯誤消息和回調函數。我使用Kohana MVC框架,我想知道是否有任何方法可以縮短我的驗證代碼。我試圖想到以下內容什麼是處理重複和冗長的驗證碼的好方法?

  1. 將驗證代碼放在我的模型中(對於像我這樣的noob來說這是相當有效的)。
  2. 創建一個非常小的圖書館,以驗證項目(東西掛鉤的驗證類,從而使我打電話給庫,如用戶註冊,編輯和東西重複程序)

還是有什麼更好更有效的方法?

+0

你是指用戶參數驗證和/或衛生? – 2009-09-14 04:05:49

回答

2

我強烈建議在模型中加入驗證。一旦你能夠做到這一點,你創建的任何其他人將會更容易。另外如果你有多個控制器試圖保存這些數據,你將不需要重新編碼驗證。 Kohana文檔包含一些用於集成驗證庫和ORM的示例,您應該從這裏開始。

+0

模型中驗證的另一投票。 – 2009-09-16 03:31:59

0

這是我處理驗證碼的策略。我認爲,通過「驗證庫」,你的意思是確保電子郵件是電子郵件,電話號碼是數字,而不是業務規則的性質。

這個想法是讓每個業務規則代碼作爲一個函數 - 如果它是PHP,只需使用一個字符串來定義該函數;對於其他語言,您可能必須使用戰略模式。爲仿函數定義一個接口(對PHP不需要)並將其轉儲到數組中。

運行數組,該數組將返回成功,錯誤和錯誤代碼到緩衝區。最後,檢查錯誤緩衝區並確定哪個驗證失敗。用它來定製視圖。

下面是一個例子

$checkUniqueUserName = new CheckUniqueUserName(); 
$checkEmailNotUsed = new EmailNotUsed(); 
$validator = array(); 
$validator[$checkUniqueUserName->name()] = $checkUniqueUserName; 
$validator[$checkEmailNotUsed->name()] = $checkEmailNotUsed; 

$results = array(); 

foreach ($validator as $v) 
{ 

    $result[$v->getValidatorName()] = $v->execute($userInfo); 
} 

class CheckUniqueUserName() 
{ 

    public function execute($userInfo) 
    { 
     // SQL blah blah blah 

     if ($bNameUnique) 
     return array ('success' => 1) 
     else 
     return array ('success' => 0, 'error' => "$name is in used", 'error_code' => 'duplicate_name); 

    } 

} 

最後,你將有一個結果數組,每個填充驗證過程,你知道哪些失敗,哪些沒有。這可以傳遞給客戶端進行進一步處理,如突出顯示失敗的字段。 error_code用於查找正確的錯誤消息和應用於它的格式。

雖然我不太確定你的意思。

2

我使用Zend_Validate和Zend_Forms進行驗證,其中驗證代碼位於窗體init方法中。所有我需要做的是通過驗證器的陣列的每個元素和比運行..

$form->isValid($data); 

...的形式以外的驗證數據。

驗證數組很容易超過30行,因爲我用換行符分隔每個數組項。但我想你會有,如果你爲每個元素定義細粒度的驗證規則的權利。

它很容易在Zend中定義新的驗證器。

編輯:我發現了一個框架,擴展了Zend框架,允許域對象包含自己的驗證。它的所謂的Xyster框架,但我不能讓它在第一次嘗試的工作,所以我沒有嘗試過之後。

相關問題