Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 定义;“模型中的验证”;_Php_Validation_Model_Domain Driven Design - Fatal编程技术网

Php 定义;“模型中的验证”;

Php 定义;“模型中的验证”;,php,validation,model,domain-driven-design,Php,Validation,Model,Domain Driven Design,关于用户输入验证的位置,已经进行了几次讨论: 这些讨论已经很老了,所以我想再问一次这个问题,看看是否有人有新的意见。如果没有,我会提前道歉 如果您来自模型阵营中的验证-模型是否意味着数据(即活动记录/数据映射器)的OOP表示为“实体”(借用DDD术语)-在这种情况下,我假设您希望所有模型类继承公共验证约束。或者这些规则可以只是模型中服务的一部分,即验证服务?例如,你能考虑ZeNyFrm和它的验证类模型的一部分吗?域模型的概念似乎并不局限于实体,因此验证可能不一定需要局限于这些实体 似乎您需要

关于用户输入验证的位置,已经进行了几次讨论:

这些讨论已经很老了,所以我想再问一次这个问题,看看是否有人有新的意见。如果没有,我会提前道歉

如果您来自模型阵营中的验证-模型是否意味着数据(即活动记录/数据映射器)的OOP表示为“实体”(借用DDD术语)-在这种情况下,我假设您希望所有模型类继承公共验证约束。或者这些规则可以只是模型中服务的一部分,即验证服务?例如,你能考虑ZeNyFrm和它的验证类模型的一部分吗?域模型的概念似乎并不局限于实体,因此验证可能不一定需要局限于这些实体


似乎您需要在表单和“实体”之间来回处理大量可能多余的值和响应,在某些情况下,您可能无法持久化从用户输入接收的数据,或者根本无法从用户输入接收数据。

在处理用户输入时,您肯定应该在模型之外处理所有面向逻辑的验证

模型不关心您的业务逻辑。模型不关心您的开始日期是否在结束日期之后-模型关心的只是日期是否是数据库中特定字段的有效条目。它检查数据,查看格式正确的日期,然后转到下一个日期,因为模型的全部职责是确保数据在数据源之间的顺畅流动


像Zend_Form这样的类只不过是视图的抽象。

我使用Zend_Form作为模型的一部分-模型正在创建Zend_Form对象。我这样做是因为Zend_表单不仅仅是关于表单渲染;通过Zend_Validate和Zend_Filter进行备份,这是一个非常强大的工具(我最喜欢的ZF堆栈)。Matthew Weier O'Phinney写了一篇关于在模型中使用Zend_表单的好文章:

我个人更喜欢在模型中进行验证。当然,安全性考虑超出了模型应该用于的范围,但是没有任何东西表明模型是在一个地方由一个表单更新的。通过将类型验证和健全性检查放在模型之外,每次在模型上设置任何内容时都必须进行验证,这会导致复制/粘贴难以更新的代码。

数据验证应自行进行,在提交模型之前由控制器调用。

没有使用过PHP,也没有使用过Zend framework(虽然我听说过),但我非常喜欢Jimmy关于域驱动设计角度的验证。

我考虑了许多不同的数据验证方法,并决定了最好的验证方式——在创建实体之前进行验证,因为验证是一种非常依赖于上下文的东西,实体本身不应该执行验证,因为实体应该始终处于有效状态。
所以,也许是最好的方法——在将数据传递给实体构造函数之前,使用单独的验证类来验证数据。

这是对模型的有趣解释。这不是其他环境/语言所共享的。我将奖金授予Jarrod-我一直在等待,看看是否有一个普遍的共识,但从这篇文章和其他帖子中,我看到这是一个有点争议的问题。就我个人而言,我怀疑使用泛型验证类比在每个模型中编写(或子类化)验证规则更枯燥。