2011-08-17 16 views
1

どのフォームフィールドにも依存しない検証ルールを作成したいと思います。 Codeigniterでは可能ですか?私がドキュメントで見る限り、set_rulesメソッドは最初のパラメータとしてフォームフィールド名を必要とします。Codeigniter - 任意のフィールドとは無関係の匿名検証ルール

はそうであっても、私は

$this->form_validation->set_rules('products_count', 'products_count', 'callback_products_count_check'); 

を試み、これは

function products_count_check() 
    { 
    $user = $this->user_model->get(array(
     'id' => $this->session->userdata('user_id') 
    )); 

    if (! empty($user)) 
    { 
     $kit = $this->kit_model->get(array('id' => $user->kit_id)); 
     if (! empty($kit)) { 
     $products_count = $this->product_model->get(array('user_id' => $user->id, 'count' => TRUE)); 

     if ($products_count >= $kit->max_products) { 
      $this->form_validation->set_message('products_count_check', lang('products.max_products_reached')); 
      return FALSE; 
     } 
     } 
     } 

    return TRUE; 
    } 

関数がfalseを返すコールバックチェックであるが、エラーメッセージが表示されていません。

アイデア?

ありがとうございます。

答えて

2

私はあなたがすべてで実際にフォームの検証を使用することを希望しているとは思わない...

これはFLASHDATAのための仕事のように聞こえます!

チェックアウトthe session classは、私はいくつかの理由

  • あなたはform_validationクラスが意図されたものであるフォームフィールドを、検証していないため、このような状況ではフラッシュのデータを使用します。
  • Flashdataメッセージをので、あなたのコントローラでは、これを行うには、この目的の

ために意図されている...

$this->session->set_flashdata('error','Put your error message here'); 

は、ビューでは、一般的なエラーハンドラを作成

<?php if ($this->session->flashdata('error')): ?> 
    <p class="error"><?php echo $this->session->flashdata('error') ?></p> 
<?php endif; ?> 
+0

ありがとうございますが、フォーム検証メッセージを表示する関数にエラーがありました。実際、パラメータとしてフィールドが渡されない場合でも、フォームの検証は機能します。 – cili

+2

フォームを検証していない場合は....なぜフォーム検証を使用していますか? – jondavidjohn

+0

私は午前。私が意味することは、最初のパラメータがフィールド名でなくても "set_rules"関数が機能するということです。私はちょうど私がこの最後のルールを押すのを忘れたすべての私の検証ルールを含む配列をループする関数を持っています。 – cili

0

これは、フォームが処理される前に確認できるもののように見えます。その場合、私はあなたの見解でこの論理を扱います。コントローラに必要なすべての製品とキットのレコードを取得してビューに渡し、エラーがあれば適切な通知メッセージを表示するために条件を使用します。検証クラスを使用しようとするよりも簡単です。なぜなら、実際にこの方法で使用するつもりはないからです。

関連する問題