2014-02-19 66 views
0

因此搜索了互聯網和計算器,找到了之前可能討論過的任何相關內容或任何文章,我找不到任何文章,所以我發現自己創建了主題。驗證技巧 - 公開討論

我正在一個項目,我在POST上做了很多ajax請求。 Therfor驗證扮演着重要的角色,因爲它必須是。

所以我創造了一些驗證功能下

//only numeric (integer) regexp [1-9] 
    Validation::isInteger($a); 
    //numeric and alphabetic (integer&string) regexp [a-z1-9] 
    Validation::isAlphaNum($c); 
    //(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday) Regexp 
    Validation::isDay($d); 
    //Array numeric (integer) Regexp 
    Validation::isArrayNum($sortTo); 

我用它在我的代碼是這樣的上市,但這似乎這麼醜! 在型號:

if(Validation::isInteger($a)) 
{ 
    if(Validation::isAlphaNum($c)) 
    { 
    if(Validation::isDay($d)) 
    { 
     if(Validation::isArrayNum($sortTo)) 
     { 
      //do process here! 
}}}} 

然後,我想過做驗證這樣可能;不確定它是否安全! 在型號:

if(!Validation::isInteger($a) && 
     !Validation::isAlphaNum($c) &&    
     !Validation::isDay($d) && 
     !Validation::isArrayNum($sortTo)) exit; 

     //do process here anyway without "if" closure if you dont pass validation above you won't see me! 

我的問題是:

  1. 我應該在控制器或模型驗證數據?有關係嗎?
  2. 我的第二種方法安全嗎?
  3. 你如何驗證你的數據? (什麼是你的設計代碼)
  4. 我可以用什麼其他方法/技巧來美化這種醜陋。

備註:我不太關心由於驗證失敗而拋出的錯誤。

編輯:(23.02.2014)但是,如果您在驗證中遇到同樣的問題,或者想要提出一個想法,我真的建議您觀看一下,但我發現了一個視頻,該視頻對youtube.com中phpacademy的驗證有很好的解釋。 http://www.youtube.com/watch?v=rWon2iC-cQ0&index=13&list=PLfdtiltiRHWF5Rhuk7k4UAU1_yLAZzhWc

+1

太多嵌套如果.. – sagheer

+0

您可以使用標誌並將它們和字符串傳遞給一個執行所有驗證的函數。 – ElefantPhace

+0

不是它實際上是問題的一部分,但是如果你在一個條件中進行所有測試,它應該是'||'而不是'&&'(如果上面的話嵌套是相同的)。或者擺脫不操作者。 –

回答

1

許多框架將模型驗證的概念作爲自己的類或模塊引入。例如,你有一個模型,你有對該模型的驗證規則。基於規則驗證模型的任務可以存在於高級驗證類中。規則本身也可以存在於自己的課堂中。 Symfony2等框架允許通過配置或註釋對模型進行驗證規則。這將是非常值得研究如何Symfony2 uses validation