J'ai un tas de champs nom/email dans ma forme comme ceci:Faire partie d'un groupe de champs de formulaire similaires nécessaires dans CakePHP
data[Friend][0][name]
data[Friend][1][name]
data[Friend][2][name]
etc.
et
data[Friend][0][email]
data[Friend][1][email]
data[Friend][2][email]
etc.
J'ai une règle de validation personnalisée sur chacun qui vérifie si le champ correspondant est rempli. Ie. si les données [ami] [2] [nom] puis les données [ami] [2] [email] DOIVENT être remplies
Pour votre information, voici ce que l'une des deux règles ressemblent:.
Ma forme de validation règle: (j'ai une validation de courrier électronique aussi, mais c'est hors de propos ici)
'name' => array(
'checkEmail' => array(
'rule' => 'hasEmail',
'message' => 'You must fill in the name field',
'last' => true
)
)
Mon code de règle personnalisée:
function hasEmail($data){
$name = array_values($data);
$name = $name[0];
if(strlen($name) == 0){
return empty($this->data['Friend']['email']);
}
return true;
}
je dois faire en sorte que une des paires doit être rempli en un minimum. Cela peut être n'importe quand tant que les index correspondent.
Je n'arrive pas à trouver un moyen, comme si je définissais la règle de formulaire comme étant nécessaire ou que allowEmpty est faux, elle échoue sur TOUS les champs vides. Comment puis-je vérifier l'existence de 1 paire et si elle est présente, continuer?
De plus, j'ai besoin de supprimer tous les champs [Friend] vides restants, donc mon saveAll() n'enregistre pas un chargement de lignes vides, mais je pense pouvoir gérer cette partie en utilisant extract dans mon controller. Le problème principal est cette validation. Merci.