验证阶段

时间:2015-08-19 11:15:39

标签: cakephp cakephp-3.0

我正在使用Cake 3进行验证,但可能无法正常工作。 正如文档所说,有两个阶段的验证:

  

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

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

因此,如果我理解这一点,首先通过newEntitypatchEntity传递数据时会使用验证规则。 之后,使用savedelete时会使用应用程序规则。

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

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

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

非常感谢你;)

1 个答案:

答案 0 :(得分:2)

引用CakePHP documentation

  

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

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

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

手动设置字段时验证

$user->email = 'not a valid email' ; // no validation check

基本上,验证规则旨在告诉用户«嘿,你做错了什么! »。

当您致电savedelete时,始终会检查另一端的

应用规则,这些规则可用于:

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

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

$article = $this->Articles->newEntity($this->request->data);
$this->Articles->save($article) ;

This part文档解释了两层验证之间的区别。

关于您的第二个问题,您不应该检查用户是否有权在您的模型中执行某些操作,这应该由您的控制器完成,有关详细信息,请参阅CakePHP book