【发布时间】:2013-02-09 01:30:01
【问题描述】:
自从我开始学习 MVC 以来,我一直在我的控制器中验证我的表单数据,这是我在浏览 CodeIgniters 代码时养成的习惯,但我了解到它执行某些操作的方式并不是最好的,它只是完成工作。
所有表单数据都应该由域对象验证吗?如果是这样,它应该像这样在二传手中完成
public function setFirstName($firstName) {
// Check if the field was required
if(!$firstName) {
throw new InvalidArgumentException('The "First name" field is required');
}
// Check the length of the data
// Check the format
// Etc etc
}
另外,例如,如果我正在处理基本用户注册,我的 User 类没有 $confirmPassword 属性,所以我不会这样做
$user->setConfirmPassword($confirmPassword);。
检查输入的两个密码是否相等的一种方法是设置$password 并执行类似的操作
$user->setPassword($password);
if(!$user->matchPassword($confirmPassword)) {
throw new PasswordsNotEqualException('Some message');
}
我认为这将在服务层中完成?
任何可以帮助我朝着正确方向前进的建议都会很棒。谢谢。
【问题讨论】:
-
我认为 Rails 和 Django 在模型级别做到了这一点,这很有帮助。
-
他们是按照我上面的方式做的吗?通过在属性设置器中执行此操作并引发异常?
-
@WaleedKhan ,它们甚至都没有实现 MVC。他们甚至没有模型层。只有活动记录实例的集合。
-
@tereško 我在设置器中进行验证是否正确?如果是这样,我是否检查“密码”和“确认密码”字段是否正确?
标签: php oop model-view-controller model validation