2012-02-17 11 views
5

Ho trovato la convalida del modulo CodeIgniter per mostrare il messaggio di errore con il metodo load-> view, e ho perso il messaggio di errore sul campo se uso "redirect".Come inviare un modulo post-metodo allo stesso get-url in una funzione diversa in CodeIgniter?

Attualmente utilizzo una funzione per mostrare la pagina del modulo e un'altra funzione per il post del modulo.

 
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"); 
} 


Quando validazione dei form fallito, URL nel browser cambiato in "/ utenti/do_sign_up", voglio mantenere lo stesso URL nella pagina di sign_up.

Utilizzare il metodo di reindirizzamento ("users/sign_up") nella convalida del modulo non riuscita manterrà lo stesso url, ma il messaggio di errore di convalida verrà perso.

in Rails, non posso usare le rotte di config in questo modo:

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

risposta

4

imho non è necessario controllare il metodo di richiesta perché se l'utente 'GET' alla pagina che si vuole mostrare il segno sulla vista ... se l'utente "POST" alla pagina e fallisce la convalida, si desidera anche visualizzare la vista di registrazione. Non vorrete solo mostrare la vista di registrazione quando l'utente "POST" alla pagina e passa la convalida.

imho ecco il modo più elegante per farlo in 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'); 
} 

Btw questo è ciò che sto facendo nel mio config/routes.php di fare la mia CI diventare RoR-like. Ricorda che il tuo routes.php è solo un normale file php in modo da poter mettere un interruttore per generare percorsi diversi a seconda del metodo di richiesta.

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

questo sembra buono. Non ci avevo pensato in questo modo. – 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> 
Problemi correlati