【问题标题】:Validation Techniques - Open to Discussion验证技术 - 开放讨论
【发布时间】:2014-02-23 19:32:11
【问题描述】:

所以搜索了互联网和 stackoverflow 以查找之前可能讨论过的任何相关内容或任何文章,但我无法找到任何内容,所以我发现自己创建了这个主题。

我正在做一个项目,我在 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

【问题讨论】:

  • 您可以使用标志并将它们和字符串传递给一个执行所有验证的函数。
  • 并不是说它实际上是问题的一部分,但如果你在一个条件下进行所有测试,它应该是 || 而不是 && (如果上面的嵌套相同)。或者去掉 not 运算符。
  • 1) 如果发现错误,则进行否定检查并返回/抛出异常以避免丑陋的嵌套结构 2) 使用可以包含可以用验证器装饰的元素的表单对象是一件好事。查看一些框架(Zend、Symfony 等)以了解它应该如何工作
  • 我找到了解决方案,我在一个数组中创建了一堆规则,并将它们与 $_POST 一起传递到我的验证检查函数中。然后在那里过滤数据并添加错误(如果发现任何错误)。然后简单地 if(count(errors) flag = false; else flag = true;

标签: php validation xss csrf


【解决方案1】:

许多框架将模型验证的概念作为自己的类或模块引入。例如,您有一个模型,并且您有针对该模型的验证规则。基于规则验证模型的任务可以存在于高级验证类中。规则本身也可以存在于它们自己的类中。 Symfony2 等框架允许通过配置或注释对模型进行验证规则。非常值得花时间研究Symfony2 uses validation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    相关资源
    最近更新 更多