2011-02-05 20 views
0

フォームを含むすべてのマイページに含まれているフッタービューがあります。フォームの検証にCIのフォーム検証ライブラリを利用できるようにしたいと考えています。それは可能ですか?ビューでCodeIgniterフォームの検証を使用

現在、フォームはPHP_SELF環境変数を使用して現在のページにポストバックします。検証に失敗した場合、アドレスバーにコントローラ名がロードされるので、コントローラに送信する必要はありません。これは、望ましい動作ではありません。

感謝の意を表します。

おかげで、

ギャズ

答えて

0

一つの方法は、理想からかけ離れながら、すべてのコントローラに「接触」関数を作成することです。これは、ライブラリ/ヘルパーの形で行うことができます。

CIはネイティブで別のコントローラーを呼び出すことはできませんが、これを可能にする拡張機能があると思います。

もう1つのオプションはAJAXコールで、これはジェネリックコントローラに投稿し、現在のページに残っている間などにバリデーションを行うことができます。

0

この使用例では、ジェネリックコントローラへのAJAX呼び出しを行うことにします。これにより、元のページに送信する前にエラーを表示することができます。

別の方法(やや複雑です)では、フォームデータを汎用コントローラメソッドにポストし、現在のURLを含む隠し入力を渡します。

後、フラッシュセッション変数を使用してそれを検証エラーや成功メッセージを渡し、ユーザーがフォームを送信したページにリダイレクトすることができ、あなたのフォームを扱う一般的なコントローラ方法:$this->session->set_flashdata('errors',validation_errors())が(未テスト)

トリックを行う可能性があります

良いことは、ajaxの場合(リダイレクトを抑制する)と非Ajaxの場合の両方で一般的なフォーム処理メソッドを使用できることです。

0

他の人と同様に、AJAXが最適でしょう。

フォームを1つのコントローラの1つの機能にリダイレクトすると、フォーム自体のコントローラだけが作成できます。その後、戻り値URLに隠し値を設定します。エラーが出る限り、フラッシュデータで返信することができます。

ペーストコードをコピーしないでください。悪い習慣であり、バグを保証します。

//make sure you load the proper model 
if ($this->form_validation->run() == FALSE){ 
    // invalid 
    $redirect = $this->input->post('url'); 
    $this->session->set_flashdata('errors',validation_errors()); 
    redirect($redirect); 
} else { 
    /* 
     success, do what you want here 
    */ 
    redirect('send them where ever'); 
} 
関連する問題