2012-02-17 63 views
5

我發現CodeIgniter表單驗證顯示帶有load-> view方法的錯誤消息,並且如果使用「重定向」將會丟失字段錯誤消息。如何在CodeIgniter的不同函數中將post-method表單提交給相同的get-url?

目前我使用一個函數來顯示錶單頁面,另一個函數來處理表單發佈。

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


當表單驗證失敗,網址在瀏覽器將變更爲「/用戶/ do_sign_up」,我想保持相同的URL在sign_up頁。

在表單驗證失敗時使用重定向(「users/sign_up」)方法將保持相同的url,但驗證錯誤消息將丟失。

Rails中

,我不能使用路由的配置是這樣的:

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

回答

4

恕我直言,這是沒有必要的,因爲如果用戶「GET」頁面要顯示在註冊視圖,檢查請求的方法...如果他們用戶'POST'到頁面並且未通過驗證您還想顯示註冊視圖。當用戶「發佈」到頁面並通過驗證時,您只需要顯示註冊視圖。這裏

恕我直言,這是最優雅的方式來做到這一點的笨:

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

順便說一句,這是我的config/routes.php文件,使裏面有什麼即時通訊做我的CI成爲回報率,等等。請記住,您的routes.php只是一個普通的php文件,因此您可以根據請求方法放置一個開關來生成不同的路由。

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

這看起來不錯。沒有這樣想過。 – Mischa 2012-02-18 15:51:56

-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> 
相關問題