我只有最近纔開始網絡編程,我非常驚訝,儘管我使用的是驗證庫,但仍然只有20-30行代碼用於驗證,不包括錯誤消息和回調函數。我使用Kohana MVC框架,我想知道是否有任何方法可以縮短我的驗證代碼。我試圖想到以下內容什麼是處理重複和冗長的驗證碼的好方法?
- 將驗證代碼放在我的模型中(對於像我這樣的noob來說這是相當有效的)。
- 創建一個非常小的圖書館,以驗證項目(東西掛鉤的驗證類,從而使我打電話給庫,如用戶註冊,編輯和東西重複程序)
還是有什麼更好更有效的方法?
我只有最近纔開始網絡編程,我非常驚訝,儘管我使用的是驗證庫,但仍然只有20-30行代碼用於驗證,不包括錯誤消息和回調函數。我使用Kohana MVC框架,我想知道是否有任何方法可以縮短我的驗證代碼。我試圖想到以下內容什麼是處理重複和冗長的驗證碼的好方法?
還是有什麼更好更有效的方法?
我強烈建議在模型中加入驗證。一旦你能夠做到這一點,你創建的任何其他人將會更容易。另外如果你有多個控制器試圖保存這些數據,你將不需要重新編碼驗證。 Kohana文檔包含一些用於集成驗證庫和ORM的示例,您應該從這裏開始。
模型中驗證的另一投票。 – 2009-09-16 03:31:59
這是我處理驗證碼的策略。我認爲,通過「驗證庫」,你的意思是確保電子郵件是電子郵件,電話號碼是數字,而不是業務規則的性質。
這個想法是讓每個業務規則代碼作爲一個函數 - 如果它是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用於查找正確的錯誤消息和應用於它的格式。
雖然我不太確定你的意思。
我使用Zend_Validate和Zend_Forms進行驗證,其中驗證代碼位於窗體init方法中。所有我需要做的是通過驗證器的陣列的每個元素和比運行..
$form->isValid($data);
...的形式以外的驗證數據。
驗證數組很容易超過30行,因爲我用換行符分隔每個數組項。但我想你會有,如果你爲每個元素定義細粒度的驗證規則的權利。
它很容易在Zend中定義新的驗證器。
編輯:我發現了一個框架,擴展了Zend框架,允許域對象包含自己的驗證。它的所謂的Xyster框架,但我不能讓它在第一次嘗試的工作,所以我沒有嘗試過之後。
你是指用戶參數驗證和/或衛生? – 2009-09-14 04:05:49