将表单与原始输入传递给服务层

Posted

技术标签:

【中文标题】将表单与原始输入传递给服务层【英文标题】:Passing forms vs raw input to service layer 【发布时间】:2013-10-29 00:26:45 【问题描述】:

是验证表单并将其过滤后的输入传递给服务层,还是将原始输入传递给服务层,并让服务验证输入(有或没有表单实例)更好?

显然,如果是后者,控制器仍然需要访问表单,以便将其发送到视图进行渲染。如果是这样,您是否只需通过服务访问表单($service->getRegistrationForm())?

另见:

Dependency management in Zend Framework 2 MVC applications Factory classes vs closures in Zend Framework 2

【问题讨论】:

【参考方案1】:

Form 本身应该处理验证,ZF2 在 Form 类上具有启用此功能的方法。

在控制器上的一个操作中,它期望表单中的某种数据,我做的第一件事就是验证表单 ($form->isValid())。如果表单无效,控制器将立即处理。通常这涉及到直接返回 ViewModel 和表单(现在包含数据 + 验证结果),以便用户可以看到任何验证错误。

我不明白您为什么还要麻烦继续下去而不检查您是否有有效数据或您知道无效的数据。事实上,数据甚至可能是恶意的(CSRF,由表单验证处理)。

基本上,传递原始输入与过滤输入的问题从未真正出现过。

【讨论】:

我也是这样做的。 GitHub 上的 comment 让我怀疑我是否做对了。我只是在考虑在 MVC 上下文之外使用服务的情况,例如在 Web 服务中。在这种情况下,您将不得不复制不理想的过滤、验证、访问控制等。也许我想太多了……它一直在发生。 :-)

以上是关于将表单与原始输入传递给服务层的主要内容,如果未能解决你的问题,请参考以下文章

MVC设计模式与三层架构

物联网云平台

Android输入系统——InputManagerService

ASP.NET MVC 服务层输入输出数据

将上下文从 Web 请求的控制器传递到数据库层

传输层概述