2011-10-28 19 views
6

Estoy usando la clase de validación de Codeigniter para validar mi formulario. ¿Podría decirme cómo redireccionar a la página anterior desde el controlador si encuentra algún error de validación?Validación de formulario Codeigniter: ¿Cómo redirigir a la página anterior si se encuentra algún error de validación?

En mi controlador:

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

    //**** Here is where I need to redirect 

} else { 
    // code to send data to model...   

    }        

Respuesta

5

ACTUALIZACIÓN

Desea difundir un formulario, validarlo, a continuación, mostrar la forma de nuevo con la validación errores si la validación falla, o mostrar algo completamente diferente si se aprueba la validación.

La mejor manera de hacerlo es publicar un formulario de nuevo. Entonces la acción de su formulario sería action="". De esta manera, en su método, se puede comprobar para ver si se envía el formulario, y determinar qué hacer allí:

// in my form method 
if ($this->input->post('submit')) // make sure your submit button has a value of submit 
{ 
    // the form was submitted, so validate it 
    if ($this->form_validation->run() == FALSE) 
    { 
     $this->load->view('myform'); 
} 
else 
{ 
     $this->load->view('formsuccess'); 
} 
} 
else 
{ 
    // the form wasn't submitted, so we need to see the form 
    $this->load->view('myform'); 
} 

vieja respuesta

Siempre se puede pasar la corriente URI de forma oculta campo en el formulario:

<input name="redirect" type="hidden" value="<?= $this->uri->uri_string() ?>" /> 

Y luego redirigir si falla la validación:

redirect($this->input->post('redirect')); 

O puede establecer la URL de redireccionamiento en una variable de sesión flashdata:

// in the method that displays the form 
$this->session->set_flashdata('redirect', $this->uri->uri_string()); 

Y luego redirigir si falla la validación:

redirect($this->session->flashdata('redirect')); 
+0

Gracias por su respuesta. Los dos primeros códigos que ha publicado funcionan perfectamente y se aceptan para mostrar los errores de validación. Así que intenté usar los dos segundos códigos que publicaste, pero dado que tengo muy pocos conocimientos sobre PHP/codeigniter, no estoy seguro de dónde usarlos. ¿Debo pegar este "$ this-> session-> set_flashdata ('redirigir', $ this-> uri-> uri_string());" en el controlador que publiqué anteriormente o en la forma que mencioné? Gracias de nuevo :) Lo siento por mi estúpida pregunta. :( –

+0

De cualquier manera, no obtendrá los errores de validación a menos que los pase también. Actualizaré mi respuesta para reflejar que necesita que se muestren los errores de validación – swatkins

0

Bueno, por lo general se debe hacer así (pseudocódigo por ahora):

  • si form_validation == false -> La forma es, o bien no presentaron todavía o la validación falló -> cargar la vista de formulario;
  • if form_validation == true -> haz el procesamiento.

Esto significa que debe permanecer dentro del mismo controlador. Su código ya debería estar haciendo este comportamiento, que es el previsto.

Si todavía siente la necesidad de reorientar, llamar a la función apropiada:

redirect('updatebatch/get/40','refresh'); 
// assuming 'updatebatch' is the name of your controller, and 'sundial' just a folder 
+0

Gracias por su respuesta. Lo siento, debería haber dicho esto antes, en http: // localhost/sundial/updatebatch/get/40- la porción de "40" es variable. Puede cambiar de vez en cuando. en ese caso, ¿qué debería hacer? Para dejarlo en claro, aquí el 40 es el número de identificación de una fila particular de una tabla. Solo estoy usando la identificación para buscar datos. Muchas gracias por su ayuda :) –

0

He creado una función dentro de una biblioteca para crear redirecciones cuando los necesito

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

class Functions { 

public function generateRedirectURL() 
{ 
$CI =& get_instance(); 
$preURL = parse_url($_SERVER['REQUEST_URI']); 
$redirectUrl = array('redirectUrl' => 'http://' . $_SERVER['SERVER_NAME'] . $preURL['path']); 
$CI->session->set_userdata($redirectUrl); 
} 

} 

//End of the file 

y cuando se desea crear la redirección a esa página, acaba de escribir en la función:

$this->load->library('functions'); //you can put it in the autoloader config 
$this->functions->generateRedirectURL(); 

después, sólo tendrá que llamar:

redirect($this->session->userdata['redirectUrl']); 
11

extendí la URL ayudante para esto

https://github.com/jonathanazulay/CodeIgniter-extensions/blob/master/MY_url_helper.php

En su controlador:

$this->load->helper('url'); 
redirect_back(); 

Sólo hay que poner el MY_url_helper.php en application/helpers y ya está bueno para ir.

+0

solución perfecta –

+0

Comentarios: este asistente de URL funcionó perfecto para mí. Muchas gracias. En mi opinión, es mejor hacer ayuda para cosas como esta. –

+0

@AlexSpencer Gracias! Solo quiero poner una nota aquí que http está codificado en la línea 17 (no es un gran problema, pero aún así). Eso debería arreglarse, está abierto para solicitudes de extracción. –

Cuestiones relacionadas