2014-02-19 32 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