2011-07-18 6 views
2

をロードコントローラUserにおける機能は、例えば、登録フォームをロード:CodeIgniterのビューを

public function signup() 
    { 
     $this->load->view('form_view'); 
    } 

だから登録フォームURLはroot/user/signupようになる(のindex.phpを無視する)

form_viewはAは同じコントローラー内の別のメソッドに提出されるフォームは、process()となります。フォームが送信されると

<? echo form_open('user/process') ?> 

は、それは検証コードが含まれているuser/process、に行きます。検証エラーがある場合は、form_viewを再度ロードし、エラーデータを渡してフォームに表示します。

if ($this -> form_validation -> run() === FALSE) 
{ 
    //$this -> load -> vars($data); 
    $this -> load -> view('form_view'); 

} 

すべて正常です。フォームをURL user/processに提出し、form_viewがありましたので

root/user/signup 

root/user/process 

に:しかし、今user/process機能からロードされているのと同じform_viewいるので、フォームのURLが変更されますから、 process()から呼び出されています。エラーが発生した場合にform_viewがプロセス機能からロードされたときに、何らかの形で元のフォームURL(root/user/signup)をリダイレクトまたは維持できますか?

ありがとうございました。

+1

は、私は、POS、元のURLを維持しませんが、これは、CIのドキュメントにメソッドを使用したいですあなたのコントローラ内の別のメソッドに移動してください。http://codeigniter.com/user_guide/libraries/form_validation.html#thecontroller –

答えて

1

のために同じ方法を使用して検証あなたが

+0

ありがとうございます。 'count($ this-> input-> post())> 0'という理由だけで、これもうまくいくのでしょうか? 'if($ this-> input-> post())'? – Roman

+0

はい、そうです。 POSTに項目がない場合、関数はFALSE(真偽値)を返します。フィールドの存在を確認することもできます。$ this-> input-> post( 'username')と同じ結果が得られます。 –

1

私はこれを別の方法で行っています。私は実際にこれすべてを行うための1つのコントローラを持っています。

ごめんなさい、私は1つのコントローラではないということを言っていました。フォームのバリデーションを探しているのであれば、それをすべて1つのコントローラに投げてください。 CIの組み込みform_validation関数が検証を行います。バックエンドの検証(ユーザー名の確認など)が必要な場合は、「callback」というカスタム検証ルールを作成し、そのフォームに対しても検証を行うことができます。

コントローラはすべてのフィールドをチェックし、通過すると、表示したい情報(つまり、「ありがとうございました!登録しました!」)を次のページにリダイレクトするのが理想的です。チェックに失敗した場合は、再度ビューページをロードする必要があります。明らかにフィールドに再投入する必要があります。

+0

これは単なるコメントです。 – hakre

+0

@luckytaxiより多くの情報をお願いできますか?あなたは、デフォルトのフォームと同じ機能をロードするために、ただ1つのコントローラ機能を使用して、検証エラーを伴う機能をロードすべきであるということを意味しましたか?あなたはどのようにしていくつかの例を挙げることができますか?ありがとう。 – Roman

+0

@Roman、Nickのコメントを参照してください。その正確にあなたが探しているもの。 – Sukumar

0

方法/理由の詳細な説明のためにここに私の応答を参照してくださいを尋ねたとして、あなたは、あなたが常に同じ方法を得る

if(count($this->input->post()) > 0) 
{ // do validation 
    if ($this->form_validation->run()) 
    { 
     // initilize and  
     redirect('logged'); 
    } 
} 
$this->load->view('form_view'); 

ような何かを試すことができますCodeIgniterのフォームバリデーションを呼び出さなければなりません。

Question about how redirects should work

関連する問題