CakePHP 2.x 中使用 Model::saveAssociated(( 显示 hasMany 关联的验证错误的最简单方法是什么?
这是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');
例如,当验证失败时,Account.0.email 表单域似乎不会自动失效。尽管该错误列在 $this->公司->帐户->验证错误中。
有没有办法自动使相应的字段失效并显示相应的验证错误?
它不是100%自动化的,但是你可以把CakePHP提供的东西放在一起。
首先,我假设您使用的是最新的2.4
我提供的解决方案有两部分:
a( 在控制器级别验证数据
b( 在视图级别的表单帮助程序确定错误消息。
对于第 a 部分(
您可以参考此链接 http://book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.html#validating-data-from-the-controller
基于该链接,我建议两种方法。
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(( 并访问 验证错误模型属性。
2(第二种方法是使用这个
if ($this->Company->saveAll($this->request->data, array('validate' => 'only'))) {
// validates
} else {
// does not validate
}
你可以在我给出的链接底部找到这个。
现在至于b部分(在表单助手中显示错误。
您可以阅读 http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::error