首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证阶段

验证阶段
EN

Stack Overflow用户
提问于 2015-08-19 11:15:39
回答 1查看 62关注 0票数 1

我正在验证Cake 3,但很可能无法让它工作。正如文档所指出的,验证分为两个阶段:

在保存数据之前,您可能希望确保数据是正确和一致的。在CakePHP中,我们有两个验证阶段:

  • 在将请求数据转换为实体之前,可以应用围绕数据类型和格式设置的验证规则。
  • 在保存数据之前,可以应用域或应用程序规则。这些规则有助于确保应用程序的数据保持一致。

因此,如果我正确理解了这一点,那么在通过newEntitypatchEntity传递数据时首先使用验证规则。然后,在使用savedelete时使用应用程序规则。

但是,当我通过newEntity传递数据(数组)时,应用程序规则从未被使用过(从未调用buildRules)。在不传递数据的情况下使用newEntity时,使用应用程序规则!

所以,我的第一个问题是,这不是两个规则都运行,只有一个(或验证规则,或应用程序规则?)我希望第一个验证规则会被调用来检查输入,在保存之前,还会调用应用程序规则来检查实体对应用程序是否有效。

第二个问题,我应该如何验证我的API?这些操作通过newEntity方法传递数据,但我想检查(例如) category_id是否属于同一个用户。我想这是典型的应用程序规则吧?

(非常感谢;)

EN

回答 1

Stack Overflow用户

发布于 2015-08-19 12:24:53

引用CakePHP文档

验证对象主要用于验证用户输入,即表单和任何其他已发布的请求数据。

基本上,当您使用newEntitypatchEntity检查传入数据是否一致时,验证就完成了:

  • 你没有随机字符串,你应该有一个数字
  • 用户电子邮件格式正确。
  • 标准密码和确认密码相等
  • 等。

当手动设置字段时,验证是而不是

代码语言:javascript
复制
$user->email = 'not a valid email' ; // no validation check

基本上,验证规则是为了告诉用户嘿,您做错了什么!

在调用delete时,始终会检查另一端的save应用程序规则,这些规则可用于:

  • 检查字段的唯一性
  • 检查外键是否存在-有一个与您的Group对应的group_id
  • 等。

您的第一个假设在某种程度上是错误的,因为在以下场景中,验证和应用程序规则都会被检查:

代码语言:javascript
复制
$article = $this->Articles->newEntity($this->request->data);
$this->Articles->save($article) ;

文档的本部分解释了两个验证层之间的差异。

关于您的第二个问题,您不应该检查用户是否有权在您的模型中做一些事情,这应该由您的控制器来完成,有关更多细节,请参见CakePHP书

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32093951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档