0

我正在使用 CodeIgniter DataMapper ORM,但有些东西我不太明白。

在这个例子中,http://datamapper.wanwizard.eu/pages/examples/login.html,你可以看到$validation在 User 模型类上定义了一些规则。

login函数内部,您还可以看到它调用了$this->validate()->get(). 当validation函数运行时,它应该检查来自$validation.

我不明白的是,对于登录用例,只需要验证用户名和密码,但您可以在示例中看到与此用例无关的其他验证规则。具体来说,confirm_password定义了一条规则$validation,这条规则显然只针对更新用例,而不是登录用例。

由于我在示例中没有看到任何绕过这些不相关规则的代码,那么 DataMapper ORM 是如何真正知道函数中可以绕过这些不相关规则的login呢?

非常感谢大家。

4

4 回答 4

2

也许解决方案是制作2个模型:一个是“登录”(用于表用户),另一个是“注册”(也用于表用户)。然后,当您要登录时,只需使用用户的登录模型。我认为这是模型的真正目的。(现在您在 2 个模型中有 2 组验证)

于 2011-06-09T07:22:38.093 回答
1

调用对象的 validate() 函数是应用验证规则所需的全部内容。请注意,只要您执行不带参数的 save() 调用,就会自动运行验证。您还可以在对象上运行或 validate()->get() 以使用对象当前字段值获取匹配记录。

http://datamapper.wanwizard.eu/pages/validation.html

我认为仅仅是因为验证将使用对象当前字段运行,并且“confirm_password”字段是“非数据库表字段”。

于 2011-04-21T12:12:58.370 回答
1

用于登录form_validation library并仅验证username/password,因为registration您可以使用DataMapper并且在您的模型中添加规则confirm_password 必须匹配password但不要 requiredconfirm_password..中添加规则应该这样做

于 2012-02-11T02:58:12.763 回答
1

Datamapper 的验证方法会忽略不属于对象的字段的规则。因此,confirm_password除非对象具有该字段名称的属性,否则不会触发规则。

数据验证规则应该在模型中,而不是在控制器中,因为它是数据的唯一入口点,它确保进入数据库的所有数据都是验证。它还回答了 DRY,您不想在每个使用模型的控制器中定义验证规则。

鉴于这一事实,为可能在您的 CRUD 表单上的额外字段定义规则并将其全部保存在一个地方很简单。

于 2012-03-26T16:23:00.127 回答