提问者:小点点

在CakePHP 2中,显示多个关联的验证错误的最简单方法是什么。十、


在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中-

是否有办法自动使相应字段无效并显示相应的验证错误?


共1个答案

匿名用户

它不是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