2009-07-20 68 views
0

需要我有一大堆的名称/电子邮件字段的在我的形式类似的这样的表单字段中的一种:制作组在CakePHP中

data[Friend][0][name] 
data[Friend][1][name] 
data[Friend][2][name] 

data[Friend][0][email] 
data[Friend][1][email] 
data[Friend][2][email] 

我有一个自定义验证规则,每个检查是否填写相应的字段。如果数据[朋友] [2] [名],然后数据[朋友] [2] [邮件]必须在充满

仅供参考,继承人什么的两条规则一个样子:

我的表单验证规则:(我有一个电子邮件验证过,但是这无关紧要这里)

'name' => array(
    'checkEmail' => array(
     'rule' => 'hasEmail', 
     'message' => 'You must fill in the name field', 
     'last' => true 
    ) 
) 

我的自定义规则代码:

function hasEmail($data){ 
    $name = array_values($data); 
    $name = $name[0]; 
    if(strlen($name) == 0){ 
    return empty($this->data['Friend']['email']); 
    } 
    return true; 
} 

我需要它,以便对应该作为填充至少。它可以是任何只要索引相对应的。

我无法想象,如果我将表单规则设置为required或allowEmpty false,它将在所有空字段上失败。我如何检查1对的存在,如果存在,继续?另外,我需要去除所有剩余的空[Friend]字段,所以我的saveAll()不会保存一行空行,但我认为我可以在控制器中使用提取来处理该部分。主要问题是这种验证。谢谢。

回答

1

我会看看Model::beforeValidate回调(API)。

使用此回调输出调试信息应该可以帮助您了解每次调用时触发了多少次以及模型可以使用哪些数据。

有了这些信息,您可以在找到第一个匹配对时创建一个标志,并篡改Model :: validates数组或Model :: data数组以绕过随后的验证尝试。

至于您的最后一点,您可以使用Set::filter轻松删除数据集中的空白字段。