【问题标题】:validation in mvc phpmvc php中的验证
【发布时间】:2012-11-19 00:33:16
【问题描述】:

我不知道哪个最好? 您认为最好在控制器中验证user login form 或其他形式,还是最好在模型中定义一个类,例如“安全类”以进行验证? 或定义一些类进行验证? 你知道更好的选择或好的技术吗?

<?php
class acontroller{
.
.
.
private function loginformAction()
{
    $this->actionform='loginform';
    $this->errorMsg=array();
    if(isset($post)){
        if(empty($post('aliasName'))){
                       ...
        }else{
           ...
                    }
        if(empty($post('password'))){
                      ...
        }
        if(empty($post('re_password'))){
                      ...   
        }
        if(!empty($post('password')) && isset($post('re_password')) ){
                      ...
        }
    }

    $this->render();
}
  .
  .
  .
 }   

【问题讨论】:

    标签: php validation model-view-controller


    【解决方案1】:

    验证是域逻辑的一部分。控制器应该与此无关。它只需要将传入的请求值传递给模型层的适当部分。

    验证本身应该在模型层内的domain objects 中进行。此外,在某些形式中,您必须担心数据完整性(即注册表中的唯一用户名)。在这种情况下,数据完整性检查实际上应该由data mappers 处理,本质上是将数据传递给 SQL 数据库,由 SQL 数据库执行检查,如果存在违规,它会触发 DB 抽象异常。

    更新

    由于您的问题是处理身份验证/授权,您可能会发现 this post 相关。

    【讨论】:

    • 对不起,如果我完全理解的话,域对象完全不知道所使用的存储,而是为了处理业务逻辑而存在的。另一方面,数据映射器负责将域对象中的数据集存储到集合数据存储中。
    • 但是我有不同的表单,这意味着我应该写一些类来处理这些表单的业务逻辑?! :(
    • 表单用于创建条目。如果您有多个表单,创建 same 实体(例如,您有普通用户注册和基于 OpenID 的注册),那么,如果底层逻辑相同,则验证发生在相同类型的域中目的。输入之间的差异可以由控制器或服务处理。如果逻辑不同,则意味着您应该使用不同的域对象。这就是多态性的用武之地。
    【解决方案2】:

    IMO“表单验证”又名“字段 X 是否已填写?检查长度、检查内容等”可以在控制器中处理,但最好将“用户身份验证/访问控制”处理为它自己的模型对象。

    实际上,我有一个“表单”模型对象,它可以构建和验证表单,因此我不会在每个接受输入的控制器中重新实现代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-20
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多