2010-06-15 6 views
0

J'utilise la technique d'enregistrement des règles de validation de formulaire codeigniter dans un fichier de configuration tel que spécifié here, mais ne semble pas fonctionner correctement.Le fichier de configuration de la validation du formulaire Codeigniter ne fonctionne pas

Je tente également d'invoquer des fonctions de rappel de validation à partir d'une bibliothèque Validation_Callbacks.php que je suis en train de charger automatiquement via le mécanisme autoload.php.

est Ci-dessous un extrait de mon formulaire de form_validation.php règles de validation fichier de configuration:

<?php 
/* This config file contains the form validation sets used by the application */ 

$config = array(
    'register_user' => array(
      array(
        'field' => 'dob', 
        'label' => 'lang:register_dob', 
        'rules' => 'trim|required|date_check|age_check|xss_clean' 
       ), ... 
      ) 
     ) 

Et est le fichier Validation_Callbacks.php ici, qui vit sous application/bibliothèques:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
/** 
* Custom validator library containing app-specific validation functions 
*/ 
class Validation_Callbacks { 
/* Checks that the given date string is formatted as expected */ 
function date_check($date) { 
    $ddmmyyyy='(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.](19|20)[0-9]{2}'; 
    if(preg_match("/$ddmmyyyy$/", $date)) { 
     return TRUE; 
    } else { 
     $this->form_validation->set_message('date_check', $this->lang->line('error_register_dob_format')); 
     return FALSE; 
    } 
} 

/* Checks that the given birthday belongs to someone older than 18 years old. We assume 
* that the date_check method has already been run, and that the given date is in the 
* expected format of dd/mm/yyyy */ 
function age_check($date) { 
    $piecesDate = explode('/', $date); 
    $piecesNow = array(date("d"), date("m"), date("Y")); 
    $jdDate = gregoriantojd($piecesDate[1], $piecesDate[0], $piecesDate[2]); 
    $jdNow = gregoriantojd($piecesNow[1], $piecesNow[0], $piecesNow[2]); 

    $dayDiff = $jdNow - $jdDate; 

    if ($dayDiff >= 6570) { 
     return TRUE; 
    } else { 
     $this->form_validation->set_message('age_check', $this->lang->line('error_register_age_check')); 
     return FALSE; 
    } 
} 

} 

I J'appelle cela en utilisant la norme:

if ($this->form_validation->run('register_user') == FALSE) { 

Mes fonctions de rappel ar e ne pas être appelé. Y a-t-il quelque chose qui me manque ici? Merci d'avance pour toute aide que vous pourriez être en mesure de fournir!

Répondre

1

Assurez-vous que:

Lorsqu'un groupe de règles est nommé identique à une classe de contrôleur/fonction, il sera automatiquement utilisé lorsque la course() fonction est invoquée de cette classe/fonction .

Pour vous tester, vous pouvez essayer d'utiliser:

$this->load->config('configname'); 
+0

Merci Kieran, je leur donnais des noms arbitraires, puis essayer d'utiliser $ this-> form_validation-> run ('name'). Cela est supposé fonctionner selon la documentation, mais votre solution est meilleure - cela m'empêche d'abandonner l'appel de validation à une méthode déléguée et je suis obligé de l'inclure dans la fonction 'contrôleur/fonction' de niveau supérieur. – ubermensch

Questions connexes