Validation CakePHP:当使用多个关联时,如何使表单字段无效?

Validation CakePHP:当使用多个关联时,如何使表单字段无效?,validation,cakephp,Validation,Cakephp,我需要在代码中验证数据,因为一些验证规则依赖于多个字段 我的模特是人、地址和爱好。联想是这样的: Person hasOne Address hasMany Hobby Address belongsTo Person Hobby belongsTo Person 现在,当人员模型的任何字段不正确或任何地址字段不正确时,我只需在控制器中编写以下代码,通知用户他/她需要更正给定字段: // this works fine! $this->Person-

我需要在代码中验证数据,因为一些验证规则依赖于多个字段

我的模特是人、地址和爱好。联想是这样的:

Person 
    hasOne Address
    hasMany Hobby

Address
    belongsTo Person

Hobby
    belongsTo Person
现在,当人员模型的任何字段不正确或任何地址字段不正确时,我只需在控制器中编写以下代码,通知用户他/她需要更正给定字段:

// this works fine!
$this->Person->invalidate('person_model_field_name', __('Help text'));
$this->Person->Address->invalidate('address_model_field_name', __('Help text'));
现在,如何以类似的方式使任何嗜好模型字段无效

昨晚我真的很努力,但我所有的尝试都失败了。我不敢相信在Cakev中没有办法做到这一点。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
我也见过,但我还是迷路了-

更新

下面是一个我需要这个的例子:


例如:当Person.is\u student字段为true时,用户需要填写Person.studies\u year字段;否则,他/她需要填写Person.permission\u date字段。所以,我需要使用allowEmpty规则,针对学习年和毕业日期的亲自模型验证规则。与Hobby模型类似。

在本例中,我将使用

$this->Person->saveAll($this->request->data, array('deep' => true));
如果验证失败,您可以在中读取所有验证消息:

$this->Person->validationErrors;

然后在模型中定义所有验证规则和消息

我就是这么做的。但是在我的模型被保存后,我需要检查其他条件——我刚刚用一些关于这个问题的背景信息更新了我的问题。无论如何,我需要的是写入$this->Person->validationErrors,或者以任何其他方式向用户指出某些字段值不正确。此外,我允许保存模型数据,因为有许多字段需要填写,我不希望用户丢失任何编辑,即使某些字段不正确。我的项目中也有类似情况,我使用:$this->Person->saveAll$this->request->data,array'deep'=>true,'validation'=>true;当我试图保存hasMany或任何其他关联时,我会在$this->Person->validationErrors中收到错误消息;没关系,它对我也有用。:-但除此之外,我想指出,例如,field Hobby.0.kind无效,因为Person.age低于某个限制。哦。现在我明白了。我仍然会尝试编写自定义验证规则:D我认为这比这个简单得多。听起来很有趣。不幸的是,我的一些验证规则依赖于没有存储在任何模型中的数据,而是依赖于定义的工作流。我想我可以通过某种方式粘贴我的自定义验证规则,但我不想这样做,因为它闻起来很难闻我只需要一种方法使我想要的字段无效。我觉得你应该考虑使用自定义验证规则。可能地然而,我的验证规则不仅依赖于模型数据,还依赖于流程工作流。这就是为什么我更喜欢手动使某些字段无效。