【发布时间】:2014-01-13 21:32:52
【问题描述】:
我需要验证代码中的数据,因为某些验证规则取决于多个字段。
我的模型是Person、Address 和Hobby。关联如下所示:
Person
hasOne Address
hasMany Hobby
Address
belongsTo Person
Hobby
belongsTo Person
现在,当 Person 模型的任何字段不正确或任何 Address 字段不正确时,我可以简单地在我的控制器中编写以下代码来通知用户他/她需要更正给定字段:
// this works fine!
$this->Person->invalidate('person_model_field_name', __('Help text'));
$this->Person->Address->invalidate('address_model_field_name', __('Help text'));
现在,如何以类似的方式使任何 Hobby 模型字段无效?
昨晚我真的很努力,但我所有的尝试都失败了。我不敢相信在 CakePHP v. 2.4.3 中没有办法做到这一点(毕竟这不是第一个版本,对吧?)。
// doesn't work
$this->Person->Hobby->invalidate('hobby_model_field_name', __('Help text'));
// doesn't work neither
$this->Person->Hobby->invalidate('Hobby.0.hobby_model_field_name', __('Help text'));
// tried to work directly on validationErrors array but also failed
我也见过this question,但我还是迷路了。 :-(
更新
这里有一个例子说明为什么我需要这个:
例如:当Person.is_student字段为true时,用户需要填写Person.studies_year字段;否则他/她需要填写Person.diploma_date字段。因此,在Person 和studies_year 和diploma_date 的模型验证规则中,我需要使用allowEmpty 规则。与 Hobby 模型类似。
【问题讨论】:
-
听起来您应该考虑使用自定义验证规则。 book.cakephp.org/2.0/en/models/…
-
可能。但是,我的验证规则不仅取决于模型数据,还取决于流程工作流。这就是为什么我更愿意手动使某些字段无效。
标签: validation cakephp