参见英文答案 >
validation in mvc php 2个
我知道这样的问题在stackoverflow上已被多次询问,但即使在读完之后,我仍然感到困惑.我希望通过演示示例问题来明确表单验证的处理方式.
假设我的网站上有一个表单,有一个人填写并随后提交的字段.该模型希望控制器正确地传递该值,以便在内部处理该值.模型通过函数getInput接收输入,该函数设置以下规则:
>输入必须是字符串类型.
>输入必须大于0且小于或等于100个字符.
>输入必须与电子邮件地址的模式匹配.
我想我应该在getInput中抛出异常,如果这些条件中的任何一个不符合;毕竟,控制器传递的值与模型设置的规则不匹配.
除了上述规则之外,控制器(至少我确定这适用于控制器)还必须在脚本继续执行其他三个规则之前验证输入值是否已设置在第一位.
现在我的问题是:这些(4)规则中哪一个要由控制器验证,哪些规则由模型验证?很明显,控制器知道模型请求的内容,以便它可以调整(如果没有,它可能会面临抛出异常的后果).另一方面,拥有多个控制器似乎是多余的,它们都使用模型及其getInput,验证相同类型的字符串,以便它匹配模型设置的规则.此外,如果控制器首先验证输入是否具有正确的长度 – 例如 – 并且模型在此之后立即执行完全相同的操作,一旦调用getInput,似乎会出现更多冗余.
在这个例子中,控制器和模型可以看作是一个伙伴关系,模型是一个脾气暴躁的完美主义者,他将验证他从控制器获得的输入,无论这些亲切的伙伴努力为他提供的行动如何带着他所有的欲望.但这种关系不是非常低效吗?