我正在验证Cake 3,但很可能无法让它工作。正如文档所指出的,验证分为两个阶段:
在保存数据之前,您可能希望确保数据是正确和一致的。在CakePHP中,我们有两个验证阶段:
因此,如果我正确理解了这一点,那么在通过newEntity和patchEntity传递数据时首先使用验证规则。然后,在使用save或delete时使用应用程序规则。
但是,当我通过newEntity传递数据(数组)时,应用程序规则从未被使用过(从未调用buildRules)。在不传递数据的情况下使用newEntity时,使用应用程序规则!
所以,我的第一个问题是,这不是两个规则都运行,只有一个(或验证规则,或应用程序规则?)我希望第一个验证规则会被调用来检查输入,在保存之前,还会调用应用程序规则来检查实体对应用程序是否有效。
第二个问题,我应该如何验证我的API?这些操作通过newEntity方法传递数据,但我想检查(例如) category_id是否属于同一个用户。我想这是典型的应用程序规则吧?
(非常感谢;)
发布于 2015-08-19 12:24:53
引用CakePHP文档
验证对象主要用于验证用户输入,即表单和任何其他已发布的请求数据。
基本上,当您使用newEntity或patchEntity检查传入数据是否一致时,验证就完成了:
当手动设置字段时,验证是而不是:
$user->email = 'not a valid email' ; // no validation check基本上,验证规则是为了告诉用户嘿,您做错了什么!
在调用或delete时,始终会检查另一端的save应用程序规则,这些规则可用于:
Group对应的group_id您的第一个假设在某种程度上是错误的,因为在以下场景中,验证和应用程序规则都会被检查:
$article = $this->Articles->newEntity($this->request->data);
$this->Articles->save($article) ;文档的本部分解释了两个验证层之间的差异。
关于您的第二个问题,您不应该检查用户是否有权在您的模型中做一些事情,这应该由您的控制器来完成,有关更多细节,请参见CakePHP书。
https://stackoverflow.com/questions/32093951
复制相似问题