输入过滤器/验证代码属于控制器还是域模型?

use*_*053 5 php validation model-view-controller input-filtering

我已经使用 php 一段时间了,但对 OO php 还很陌生。作为我自己的练习,我正在构建一个小型 MVC 框架。

我意识到这个问题可能没有明确的答案,但我想知道:输入过滤器/验证代码属于哪里?

它应该是解析请求的控制器的一部分吗?

或者在域模型中包含过滤/验证代码更合适,以便每个域对象负责验证自己的信息。

任何建议将不胜感激。

Ja͢*_*͢ck 1

控制器通常会处理请求数据(GET / POST)并检测模型不应该关心的无效表单提交、CSRF、缺失字段等。这是您最有可能编写大部分过滤代码的地方;验证应该只进行早期失败的健全性检查(例如,如果电子邮件地址不是有效的电子邮件地址,则不必向模型发送电子邮件地址)。

您的域对象还可能提供验证挂钩(甚至过滤),这会减少控制器的责任,但在大多数情况下,我个人发现使用基于契约的模型更容易(该模型假设您传递合法值),因为它更容易将验证问题直接转换为特定的表单字段。

模型本身也可以进行验证,尽管与前面提到的输入过滤(和内容类型验证)不同;例如,它可能会检查数据库中是否存在电子邮件,而不是确保它是有效的电子邮件地址。