2017-10-20 9 views
1

Je crée une entrée de formulaire en plusieurs étapes (un «assistant») dans laquelle l'utilisateur entre des parties d'une entité sur plusieurs vues d'entrée de formulaire. À chaque étape, je veux valider uniquement les données d'entrée (pas l'entité entière).Validation de plusieurs champs de formulaire spécifiques avec des erreurs()

Ma question est de savoir comment utiliser error() avec un tableau de noms de champs.

Le modèle comporte 12 champs avec des règles de validation. Je veux valider 3 de ceux dans une action de contrôleur.

Ainsi, dans cette action du contrôleur, je reçois trois entrées

$thedata = $this->request->data; 

Cela se traduit par:

['number' => '102','color' => 'blue','size' => 'large'] 

je puis faire un tableau de noms de champs:

$thearray = array_keys($thedata); 

Cette résultats dans:

[ 
(int) 0 => 'number', 
(int) 1 => 'color', 
(int) 2 => 'size'] 

Maintenant, je voudrais vérifier ces trois champs pour les erreurs.

$errors = $this->Items->newEntity($this->request->data)->errors($thearray); 

Il en résulte vérifier les 12 champs avec validation définis, non seulement les trois dans le tableau, et la validation échoue (il ramasse toutes les erreurs de l'entité).

Si je définir qu'un seul champ pour vérifier cela fonctionne:

$errors = $this->Items->newEntity($this->request->data)->errors('number'); 

Cette correctement valide uniquement le champ « nombre » et produit le résultat souhaité. Cependant, le passage d'un tableau de champs à la place d'une chaîne avec un seul nom de champ valide TOUS les champs nécessitant une validation.

Aussi, j'ai essayé de coder en dur un tableau en tant que paramètre d'erreurs():

$errors = $this->Items->newEntity($this->request->data)->errors(['number','color']); 

qui vérifie également les 12 champs dans la définition de la table, pas seulement ces deux.

Donc la question est, comment préparez-vous le tableau et passez-le à la méthode errors() si vous voulez vérifier seulement deux ou trois champs spécifiques?

Merci d'avance pour tout conseil! D

Merci à

Répondre

0

Selon the docserrors peut prendre un argument $field, mais pas un tableau. Si vous voulez valider plusieurs champs sans les valider tous, vous pouvez boucler $thearray.

$item = $this->Items->newEntity($this->request->data); 

foreach ($thearray as $error) { 
    $errors[] = $item->errors($error); 
} 
+0

Merci Bill. J'ai aussi pensé à cela, mais j'ai trouvé dans le document API [ici] (https://api.cakephp.org/3.5/class-Cake.Datasource.EntityInterface.html#_errors) qu'il est supposé être capable de prendre tableau aussi bien. Ce serait bien ... mais le foreach peut probablement le résoudre. Peut-être un bug? – dividedbyzero

+0

@dividedbyzero Oh c'est intéressant.Oui, il semble que votre code d'origine aurait dû fonctionner. – bill

+1

Peut-être que je l'afficherai sur github. En attendant, je pense que la boucle devrait le faire. Merci encore et passez un bon week-end! – dividedbyzero