php - 验证应该在 Form 对象或模型中完成吗?

标签 php zend-framework validation zend-validate

这个问题主要针对PHP中的Zend,当然其他语言和框架肯定也适用,所以欢迎大家提意见。

我最近才开始使用 Zend 框架,虽然它并不完美,但我已经玩得很开心了。然而,让我发疯的一件事是,我看到的大多数使用 Zend 的人的例子都是 v alidation in special form objects , 而不是在模型中。我认为这是一种不好的做法,因为数据可以通过表单输入之外的其他方式进入系统,这意味着要么验证器必须弯曲和扭曲以验证其他输入,要么必须在第二个地方进行验证,并重复逻辑。

我在其他一些帖子和博客上找到了和我有同样感受的人,但是 Zend 的开发者做出这个选择是有原因的,其他人似乎没有问题地使用它,所以我想在这里从社区获得一些反馈。

正如我所说,这主要适用于 Zend,尽管我认为从整体上看这个问题很重要,而不是在 Zend 框架的范围内工作,因为 Zend 的设计让您可以尽可能多地使用,或尽可能少,如您所愿。

最佳答案

这是一个非 zend 特定的答案,但我认为该模型应该对其自身数据的有效性负责。如果是这种情况,则验证属于模型,但是这可能并不总是可以实现,并且可能需要在 View 中执行验证,但是我认为这应该是在模型中执行的验证的补充而不是替代

仅在 View 中进行验证的问题在于,在某些时候您可能需要另一个 View 来查看您的数据。您的网站可能会变得流行,并且客户要求使用基于 XML 的 API 来生成他们自己的 View 。然后您是否依靠客户来验证数据?

即使您不必提供 API,一些客户也可能需要完全不同的自定义 View 以保证页面的完全不同版本,您现在再次在重复的 View 中进行验证。

我认为理想的场景是让您的模型执行验证,但让验证结果可供 View 读取并再次呈现页面并显示验证结果。

如果您想立即向用户显示验证数据等,我认为让 View 进行验证是完全合理的,但数据有效性的最终决定应由模型决定。

关于php - 验证应该在 Form 对象或模型中完成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/659950/

相关文章:

php - Codeigniter 找不到 Assets (css|js|图像)

php - 计算 MySQL 表中给定值之前的行数

zend-framework - 在不使用MVC的情况下使用Zend Framework Db表

validation - 我如何根据 Symfony2 中表单本身的某些字段仅验证某些验证组

php - Android:如何使用参数从mysql获取数据到sqlite

php - 通过 PageController 路由所有请求,现有 Controller 除外 (Zend Framework)

php - Zend Framework 中的自定义类和函数

java - 验证 guice 模块配置 - 如何使用 SPI?

javascript - 如何使用 javascript 枚举文档中的所有 html id?

php - 区分数学用户输入和其他所有输入