2010-10-19 5 views
0

J'ai une application qui permet aux utilisateurs de créer des formulaires et d'attribuer une validation à chaque champ (pensez http://www.phpform.org/ ou http://wufoo.com/). Je peux facilement obtenir le nom et l'étiquette de chaque champ à partir de la base de données, ainsi que le tableau des règles de validation associées.CodeIgniter Callback Problème

Say, par exemple, je voulais appliquer une règle générale de « nécessaire » pour toutes les formes définies par l'utilisateur, je ferais quelque chose comme ceci:

foreach($fields as $field) 
{ 
    $this->form_validation->set_rules($field[‘name’], $field[‘label’], ‘required’); 
} 

Maintenant, le problème est que j'ai besoin remplacer "requis" par un rappel. Pour que le rappel fonctionne, je vais avoir besoin de l'identifiant du champ (afin que le callback puisse utiliser cet identifiant pour rechercher les règles de validation associées au champ). Comment puis-je obtenir cette valeur d'identification à la fonction de rappel?

Répondre

4
foreach($fields as $field) 
{  
    $this->form_validation->set_rules($field[‘name’], $field[‘label’], "callback__example[$field[‘id‘]]"); 
} 

// your callback... see ~line 589 of Form_validation library 
public function _example($str,$id) 
{ 
    // do something to $str using $id, return bool 
} 
+0

Merci, cela a fonctionné pour moi! – StackOverflowNewbie

+1

En outre, CI s'attend à ce que les rappels de validation soient des méthodes publiques du contrôleur - ce qui signifie qu'ils sont malheureusement adressables via url. Pour éviter cela, vous pouvez utiliser le préfixe de soulignement pour le nom de la fonction. Donc, la méthode de rappel est '_mycallback' et elle est traitée dans les règles de validation avec le préfixe 'callback_', donc il y a un double trait de soulignement: 'callback__mycallback' – Natebot