在 CakePHP 2.x 中显示许多关联的验证错误的最简单方法是什么?


What is the simplest way to display validation errors for hasMany associations in CakePHP 2.x?

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