2 votes

Problème d'enregistrement des règles de validation dans un fichier de configuration

J'essaie de déplacer les règles de validation d'un contrôleur vers un fichier de configuration. Je suis les instructions telles que documentées aquí mais je n'arrive pas à le faire fonctionner. Lorsque le formulaire est soumis, la validation ne s'exécute pas. Écho de validation_errors() n'imprime rien.

Après avoir creusé un peu, la run() de la bibliothèque de validation de formulaires renvoie faux parce qu'il n'y a pas de règles de configuration définies. En voici un extrait :

system/libraries/Form_validation.php :

// No validation rules?  We're done...
if (count($this->_config_rules) == 0)
{
    return FALSE;
}

Toute aide serait appréciée. Voici mon code :

application/controllers/signup.php :

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Signup extends CI_Controller {

    public function __construct() {
        parent::__construct();
    }

    public function index() {
        if ($this->form_validation->run()) {
            $this->user_model->insert(array(
                'email_address' => $this->input->post('email_address'),
                'password' => $this->input->post('password'),
            ));

            redirect('/log-in');
        }

        $this->load->view('header');
        $this->load->view('signup/index');
        $this->load->view('footer');
    }

}

/* End of file signup.php */
/* Location: ./application/controllers/signup.php */

application/config/form_validation.php :

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$config = array(
    'signup/index' => array(
        array(
            'field' => 'email_address',
            'label' => 'Email Address',
            'rules' => 'trim|required|max_length[255]|valid_email|email_in_use'
        ),
        array(
            'field' => 'password',
            'label' => 'Password',
            'rules' => 'required|min_length[6]'
        ),
        array(
            'field' => 'confirm_password',
            'label' => 'Confirm Password',
            'rules' => 'required|matches[password]'
        ),
    ),
);

/* End of file form_validation.php */
/* Location: ./application/config/form_validation.php */

J'utilise CI 2.1.0.

0voto

Catfish Points 3669

Vous devez passer votre var de configuration dans la méthode d'exécution. Lisez la section dans le lien que vous avez posté intitulée "Calling a Specific Rule Group".

0voto

Damien Pirsy Points 15492

C'est peut-être une erreur de frappe de votre part, mais la configuration devrait être stockée à l'intérieur. application/config/form_validation.php (et non "application/controllers/signup.php" comme vous l'avez écrit dans le post). De cette façon, il devrait être appelé automatiquement.

En développant ce que @Catfish a dit, vous pouvez soit :

  1. Ne créez pas un ensemble différent de règles (si vous n'en avez besoin que d'une seule), et votre tableau ressemblera à ceci :

    $config = array(
               array(
                     'field'   => 'username',
                     'label'   => 'Username',
                     'rules'   => 'required'
                  ),
               array(
  2. Créez différents ensembles de règles, qui suivent la structure que vous avez utilisée ; mais dans ce cas, vous devez passer à l'élément run() méthode dont la règle que vous voulez utiliser. Ainsi, dans votre cas, ce devrait être

      if($this->form->validation->run('signup/index'))

0voto

Jordan Arseno Points 3979

Quelques trucs...

Avez vous chargé la bibliothèque form_validation dans config/autoload.php ? Parce que je ne le vois pas être chargé dans votre contrôleur. Si vous voulez le charger dans votre contrôleur, utilisez $this->load->library('form_validation') .

Je vois une règle pour le champ email appelée email_in_use Où cette règle est-elle stockée ? Si vous allez créer des règles personnalisées, assurez-vous qu'elles se trouvent à libraries/MY_Form_validation.php .

Je n'ai jamais utilisé la méthode contrôleur/fonction, et elle a toujours fonctionné pour moi. J'utiliserais quelque chose comme $this->form_validation->run('login'); pour quelque chose comme ça.

Pouvez-vous confirmer si la validation run() L'appel est évalué à vrai ou faux ? Votre page redirige-t-elle vers connexion ? (BTW : Je ne pense pas que vous ayez besoin de l'option / dans l'appel de redirection.

Enfin, les erreurs PHP sont-elles activées pour E_ALL ? Vérifiez php.ini .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X