我正在使用Cake 3进行验证,但可能无法正常工作。 正如文档所说,有两个阶段的验证:
在保存数据之前,您可能希望确保数据正确且一致。在CakePHP中,我们有两个阶段的验证:
- 在将请求数据转换为实体之前,可以应用围绕数据类型和格式的验证规则。
- 在保存数据之前,可以应用域或应用程序规则。这些规则有助于确保应用程序的数据保持一致。
因此,如果我理解这一点,首先通过newEntity
和patchEntity
传递数据时会使用验证规则。
之后,使用save
或delete
时会使用应用程序规则。
但是,当我通过newEntity
传递数据(数组)时,永远不会使用应用程序规则(永远不会调用buildRules
)。在不传递数据的情况下使用newEntity
时,会使用应用程序规则!
所以,我的第一个问题,是不是两个规则都运行,只有一个(OR验证规则,OR应用程序规则?)是正确的。我希望可以调用第一个验证规则来检查输入,在保存之前,还会调用应用程序规则来检查实体是否对应用程序有效。
第二个问题,我应该如何使用我的API进行验证?操作通过newEntity
方法传递其数据,但我想检查(例如)category_id
是否属于同一用户。这是我猜的典型应用规则吗?
非常感谢你;)
答案 0 :(得分:2)
验证对象主要用于验证用户输入,即表单和任何其他发布的请求数据。
基本上,当您使用newEntity
或patchEntity
检查传入数据是否一致时,验证已完成:
手动设置字段时验证不:
$user->email = 'not a valid email' ; // no validation check
基本上,验证规则旨在告诉用户«嘿,你做错了什么! »。
当您致电save
或delete
时,始终会检查另一端的应用规则,这些规则可用于:
Group
与您的group_id
您的第一个假设在某种程度上是错误的,因为在以下场景中,检查验证和应用程序规则:
$article = $this->Articles->newEntity($this->request->data);
$this->Articles->save($article) ;
This part文档解释了两层验证之间的区别。
关于您的第二个问题,您不应该检查用户是否有权在您的模型中执行某些操作,这应该由您的控制器完成,有关详细信息,请参阅CakePHP book。