web-dev-qa-db-fra.com

Comment afficher les erreurs de validation en utilisant redirect dans codeigniter?

Je traite un problème depuis un moment. Comment définir les erreurs de validation en utilisant la redirection dans une fonction? C'est le code que j'ai dans mon contrôleur:

function send()
{
    $this->form_validation->set_rules('e-mail', 'Email', 'trim|required|valid_email');
    $this->form_validation->set_rules('cellphone', 'Cellphone Number', 'trim|required|is_natural');
    $this->form_validation->set_message('required', '%s is required.');
    $this->form_validation->set_message('valid_email', '%s is not a valid Email Address');
    $this->form_validation->set_message('is_natural', '%s can only contain numbers.');
    $this->form_validation->set_error_delimiters('<li>', '</li>');

    if($this->form_validation->run() == FALSE)
    {
        redirect ('/');
    }
    else
    {
        echo '<pre>';
        print_r($_POST);
        echo '<pre>';
    }
}

Et voici le code que j'utilise dans mon fichier de vue:

<? if (validation_errors())
{   
echo '<div id="validation_errors" title="Error:">';
echo '<div class="response-msgs errors ui-corner-all"><span>Errors:</span><br /><ul>';
echo validation_errors();
echo '</ul></div>';
echo '</div>';
}
?>
14
Afshin

J'ai trouvé le moyen de le faire. La redirection ne conserve pas les données à afficher. J'ai utilisé le code ci-dessous pour résoudre le problème:

if($this->form_validation->run() == FALSE)
{
    $this->index();
}
18
Afshin

Je sais que c'est un peu tard, mais cette méthode fonctionne à merveille pour moi.

Si vous validez votre formulaire dans une fonction différente de celle dans laquelle le formulaire est chargé, vous pouvez envoyer votre validation_errors() à n'importe quelle page pour laquelle vous redirect() en passant la méthode validation_errors() à $this->session->set_flashdata() comme suit:

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

    $this->session->set_flashdata('error', validation_errors());

    redirect('/');
}

Dans les fonctions de votre contrôleur où vous souhaitez recevoir vos erreurs ou vos messages, vous pouvez ensuite les définir dans le tableau $data comme suit:

if (!empty($this->session->flashdata('message'))) {

    $data['message'] = $this->session->flashdata('message');
} elseif (!empty($this->session->flashdata('error'))) {

    $data['error'] = $this->session->flashdata('error');
}

Au sommet de mes idées, j'inclus habituellement:

<?php if (isset($message)) {

    echo '<p class="alert alert-info">'.$message.'</p>';
} elseif (isset($error)) {

    echo '<p class="alert alert-danger"><strong>Error: </strong>'.$error.'</p>';
}?>

L'utilisation de classes d'amorçage Twitter pour formater les messages permet de les différencier.

J'ai inclus __données flashdata message afin que vous puissiez voir comment, quel que soit le type de message ou d'erreur que vous souhaitez envoyer, vous pouvez les formater différemment pour tous les messages d'information, d'avertissement, de succès et d'erreur.

10
MunkyMead

Selon mon commentaire:

function index()
{
    $this->load->library('form_validation');
    $data = array
    (
        'Param' => 'Value'
    );
    if($this->input->post('cellphone', true) !== false)
    {
        if($this->form_validation->run() != FALSE)
        {
            echo '<pre>' . print_r($_POST, true) . '</pre>';
        }
    }
    $this->load->view('index', $data);
}

Tout d’abord, vous devez modifier votre formulaire afin qu’il pointe vers la page en cours, à savoir current_url() ou site_url('controller/index').

Lorsque vous accédez à la variable index sans publication, la validation est simplement ignorée. Lors de la soumission de votre formulaire, il lancera la validation.

Vous pouvez ensuite utiliser les méthodes form_error ou validation_errors intégrées pour afficher les erreurs dans votre vue index.

2
Gavin

enfin, j'ai une solution pour la redirection avec validation_errors

Ceci utilise pour passer les erreurs de validation dans les données de session, je le fais comme ceci

if ($this->form_validation->run()) {
        $data = array(
            'email' => $this->input->post('email'),
            'is_login' => true
        );
        $this->session->set_userdata($data);
        redirect($this->input->post('redirect'));
    }
    else
    {
        $data = array (
            'errors' => validation_errors(),
            'is_login' => false
        );
        $this->session->set_userdata($data);
        redirect($this->input->post('redirect'));
    }

et dans la page j'ai utilisé

        $this->session->set_flashdata('redirectToCurrent', current_url());

    if ($this->session->userdata('is_login'))
    {
        echo "You are using this as : </br>" . $this->session->userdata('email');
        echo "</br><a href='/logout'>Logout</a>";
    }
    else
    {
        echo form_open('login');
        echo "" . $this->session->userdata('errors');
        echo "email : " . form_input('email');
        echo "Password : " . form_password('password');
        echo form_submit('submit', 'Login');
        echo form_hidden('redirect',$this->uri->uri_string());
        echo form_close();
    }   

Je te souhaite cette solution rapide

0
Tamer Fahmy