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

时间:2014-01-13 21:32:53

标签: validation cakephp

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

我的模型是PersonAddress& 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字段。因此,在Personstudies_year的{​​{1}}模型验证规则中,我需要使用diploma_date规则。与Hobby模型类似的情况。

1 个答案:

答案 0 :(得分:0)

在这种情况下,我会使用

$this->Person->saveAll($this->request->data, array('deep' => true));

如果验证失败,您可以阅读以下所有验证消息:

$this->Person->validationErrors;

您可以在模型中定义所有验证规则和消息