在CakePHP2. x中,使用Model::sa()显示has很多关联的验证错误的最简单方法是什么?
下面是CakePHP烹饪书中的一个例子。(http://book.cakephp.org/2.0/en/models/saving-your-data.html#saving-related-model-data-hasone-hasmany-belongsto)
echo $this->Form->create('Company', array('action' => 'add'));
echo $this->Form->input('Company.name', array('label' => 'Company name'));
echo $this->Form->input('Company.description');
echo $this->Form->input('Company.location');
echo $this->Form->input('Account.0.name', array('label' => 'Account name'));
echo $this->Form->input('Account.0.username');
echo $this->Form->input('Account.0.email');
echo $this->Form->end('Add');
验证时,例如,帐户。0.电子邮件失败表单字段似乎不会自动失效。虽然错误列在$this中-
是否有办法自动使相应字段无效并显示相应的验证错误?
它不是100%自动化的,但是你可以把CakePHP提供的东西放在一起。
首先,我假设您使用的是最新的2.4版本
我提供的解决方案有两个部分:
a) 您可以在控制器级别验证数据
b)在视图级别的FormHelper中确定错误消息。
(甲部)
你可以参考这个链接http://book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.html#validating-来自控制器的数据
基于这个链接,我建议两种方法。
1) 您可以单独验证每个模型数据。
例如,
if ($this->Company->validates(array('fieldList' => array('name', 'location')))) {
// valid
} else {
// invalid
}
然后你做一个
if ($this->Account->validates(array('fieldList' => array('email')))) {
// valid
} else {
// invalid
}
因为您使用的是hasMany,所以可能需要分别验证每个不同的帐户数据集。
所以你可能会使用一个循环,所以你可以使用,
如果要在循环中进行验证,并且希望每组错误分别出现,请不要使用invalidFields()。而是使用validates()并访问validationErrors模型属性。
2) 第二种方法是使用这个
if ($this->Company->saveAll($this->request->data, array('validate' => 'only'))) {
// validates
} else {
// does not validate
}
你可以在我提供的链接的底部找到这个。
现在,对于第b部分),在FormHelper上显示错误。
你可以读http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::e