2012-05-03 142 views
1

我正在構建一個基本顯示3個窗體的小應用程序......第一個是可選的,第二個不是,第三個不是。我希望每個表單都是一個單獨的URL(控制器)。在閱讀CodeIgniter form_validation的文檔時,表單似乎只能提交給自己進行驗證。如果是這樣的話,形式會繼續顯示在同一頁上......他基本上我有什麼...在我想要做什麼評論...CodeIgniter驗證邏輯

class Index extends CI_Controller { 

function __construct() 
    { 
     parent::__construct(); 
    } 

     function index() 
     { 
     //load front page that contains first form... 
       $content['title'] = 'Home'; 
       $content['view'] = 'pages/index'; 
       $this->load->view('template/default',$content); 

     } 
     function step_two() 
     { 
      //recieve information from front page. validate form. If validation is 
      //successful continue to step_two(url) if it fails redirect 
      //to front page with error... 

      $this->form_validation->set_rules('serial', 'Serial Number', 'required'); 

      if ($this->form_validation->run() == FALSE) 
      { 
      //return to front page... 
      }else{ 
      //do necessary work and load step_two view 
      } 


     } 

} 

?> 

這是一個片段我的想法。但是我注意到,除非表單提交給自己,否則你不能進行表單驗證。有任何想法嗎?我應該驗證表單然後重定向到新的url /函數嗎?

感謝球員...

+0

成功驗證時重定向... – rlemon

回答

5

你這是怎麼做到這一點

控制器 -

public function step1() 
{ 
     if ($this->form_validation->run() == FALSE) 
     { 
      $this->load->view('myform1'); 
     } 
     else 
     { 
      //do something to post data 
      redirect('/controller/step2'); 
     } 
} 


public function step2() 
{ 
     if ($this->form_validation->run() == FALSE) 
     { 
      $this->load->view('myform2'); 
     } 
     else 
     { 
      //do something to post data 

      redirect('/controller/step3'); 
     } 
} 

所以回答你的問題是肯定的,你在同樣的方法把這些和重定向成功驗證。

+0

因此,如果說...我想阻止人們訪問第3步,除非成功驗證表單2,您是否會在成功驗證後設置會話變量並在step3函數中檢查它? –

+1

是的,會話變量不是一個壞主意。或者它取決於這些表單是如何相互關聯的 - 例如 - 如果step1創建新的db記錄,那麼也許您可以在第2步中顯示錶單之前進行快速檢查 – TigerTiger