目前,我創建一個對象並使用其setter來設置從客戶端接收到的獲取/發佈數據。並呼籲像這樣保存()函數之前調用的validate():在PHP模型驗證的常見模式是什麼?
//member registration
$m=new Member();
$m->setName($_POST['name']);
$m->setBirthDate($_POST['birthdate']);
$m->setAddress($_POST['address']);
$arrOfErrMsgs=$m->validate();
if(!empty($arrOfErrMsgs)){
//echo some error messages to client or redirect to a page that shows the error
exit();
}
$saveSuccess=$m->save(); //to be safe, inside this save function, it will also call validate() again before saving, so that even someone forgot to call validate() before calling save() by mistake, no dirty data will appear in the database
if($saveSuccess){
//echo a success message to client or redirect to a success page
}else{
//echo save failed message to client (normally this should not happen unless db server suddenly fails)
}
exit();
雖然這個工作,但應該有一些替代品。例如,也許一些驗證可以在setters中完成。
我想知道什麼模式驗證模式在PHP是最常見的?
我認爲你錯了!模型應該執行邏輯(在這種情況下是驗證),控制器應該將用戶重定向到他或她應該去的地方! – AntonioCS 2009-11-14 11:40:35
@AntonioCS控制器應該進行與用戶輸入相關的驗證,而不是業務邏輯。如果驗證是驗證購買的產品數量是否超過用戶限制,則必須在模型中完成,但如果驗證是驗證提交的數據不包含可能存在的XSS漏洞,則必須在控制器中進行驗證。 – JCM 2012-03-20 22:22:06