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>';
}
?>
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();
}
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.
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
.
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