MVC [Zend Framework]:应用过滤和验证的位置

时间:2010-12-24 14:41:24

标签: php model-view-controller zend-framework

对于MVC结构的专家,我(我希望)有一个非常简单的问题:

应用输入过滤和验证的位置?控制器或型号?

我已经阅读了很多关于过滤用户输入的教程和手册,但是没有注意到应该应用它的很多讨论。使用表单时,它很简单,实际上Zend_Form通过Zend_Filter和Zend_Validate为您完成了一切。

但是当我必须从用户输入中过滤单个值并将其传递给模型时,最佳做法是什么,在将其传递给模型之前或模型本身中进行清理?

让我们假设我正在创建一个模型,其他人也会使用它,它正在对文件系统做一些重要的工作。我是否100%确定其他人在将参数传递给模型之前会正确准备参数?我不是,所以最好的是清理模型本身的参数。

但这只是我的想法,正如我之前所说,我希望听到你的意见,直接来自专业的主人;)

美好的一天。

3 个答案:

答案 0 :(得分:2)

恕我直言,这取决于你是否事先知道你将要做的验证。

如果它可以表示为正则表达式,请将其保留在控制器中,否则我认为模型应该是它的位置。

<强>实施例

您必须验证电子邮件地址:controller,因此模型可以传递一些已清理的输入,只需处理实际处理。

你必须检查文件系统中的路径是否存在:控制器将负责查看它是否是一个构造良好的路径;模型将检查它是否确实存在于相关的文件系统中。

您必须检查用户提供的字符串$ x是否可以生成存储在某处的哈希$ y:model。

答案 1 :(得分:1)

我会在控制器中说。我的理解是,模型应该在假设它们被赋予有效数据的情况下构建(但如果它们没有,则采取合理的预防措施,例如使用准备好的数据库访问语句),并留下实际验证数据到外部代理,在这种情况下是控制器。

答案 2 :(得分:0)

通常在控制器中执行此操作。模型应该处理合法的,可用的数据。