2012-02-17 11 views
5

Encontré la validación de formulario de CodeIgniter para mostrar un mensaje de error con el método load-> view, y perderá el mensaje de error de campo si usa "redirect".¿Cómo enviar un formulario post-método al mismo get-url en función diferente en CodeIgniter?

Actualmente utilizo una función para mostrar la página del formulario y otra para tratar la publicación del formulario.

 
class Users extends CI_Controller { 
    function __construct() { 
     parent::__construct(); 
    } 

    public function sign_up() 
    { 
    $this->load->view('users/sign_up'); 
    } 

public function do_sign_up(){ 
     $this->form_validation->set_rules('user_login', 'User Name', 'trim|required|is_unique[users.login]'); 
     $this->form_validation->set_rules('user_email', 'Email', 'trim|required|valid_email|is_unique[users.email]'); 

     if ($this->form_validation->run() == FALSE) { 
      $this->load->view('users/sign_up'); 
     }else { 
     // save post user data to users table 
     redirect_to("users/sign_in"); 
} 


Cuando la validación de formularios falló, url en el navegador será cambiado a "/ usuarios/do_sign_up", quiero seguir en la misma dirección URL página sign_up.

Utilizar el método de redirección ("users/sign_up") en la validación de formulario no se mantendrá la misma url, pero se perderá el mensaje de error de validación.

en Rails, no puedo utilizar rutas en las configuraciones de esta manera:

 
get "users/sign_up"  => "users#signup" 
post "users/sign_up"  => "users#do_signup" 

Respuesta

4

en mi humilde opinión, no es necesario comprobar el método de la petición ya que si el usuario 'GET' a la página que quiere mostrar el signo vista ... si usan 'POST' en la página y no validan, TAMBIÉN desea mostrar la vista de registro. Solo no querrá mostrar la vista de registro cuando el usuario 'POSTE' en la página y apruebe la validación.

en mi humilde opinión esta es la forma más elegante de hacerlo en CodeIgniter:

public function sign_up() 
{ 
    // Setup form validation 
    $this->form_validation->set_rules(array(
     //...do stuff... 
    )); 

    // Run form validation 
    if ($this->form_validation->run()) 
    { 
     //...do stuff... 
     redirect(''); 
    } 

    // Load view 
    $this->load->view('sign_up'); 
} 

Por cierto, esto es lo que estoy haciendo en mi config/routes.php para que mi CI convertirse en RoR-similares. Recuerda que your routes.php es solo un archivo php normal, así que puedes poner un interruptor para generar diferentes rutas dependiendo del método de solicitud.

switch ($_SERVER['REQUEST_METHOD']) 
{ 
    case 'GET': 
     $route['users/sign_up'] = "users/signup"; 
    break; 
    case 'POST': 
     $route['users/sign_up'] = "users/do_signup"; 
    break; 
} 
+0

Esto se ve bien. No lo había pensado así. – Mischa

-2
<button type="submit"class="md-btn btn-sm md-fab m-b-sm indigo" id="filterbtn" formaction="<?php echo base_url(); ?>front/get_filter/<?php echo$device_id;?>"><i class="fa fa-bar-chart"></i></button> 
<button type="submit"class="md-btn btn-sm md-fab m-b-sm indigo" id="filterbtn" formaction="<?php echo base_url(); ?>front/get_data/<?php echo$device_id;?>"><i class="fa fa-th-list"></i></button> 
Cuestiones relacionadas