我需要验证代码中的数据,因为某些验证规则依赖于多个字段。
我的模型是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
的{{1}}模型验证规则中,我需要使用diploma_date
规则。与Hobby模型类似的情况。
答案 0 :(得分:0)
在这种情况下,我会使用
$this->Person->saveAll($this->request->data, array('deep' => true));
如果验证失败,您可以阅读以下所有验证消息:
$this->Person->validationErrors;
您可以在模型中定义所有验证规则和消息