2017-05-11 8 views
2

私はCodeigniterフォームの検証をconfig(手動でルールを設定しない)を使用しています。必要なのは、他のフィールドに応じて必要なルールを設定することです。たとえば、我々は次のルールを持っている想像:config内のCodeigniterフォームの検証は、別の入力に依存します

'user' => array(
    array(
     'field' => 'user[phone]', 
     'rules' => 'required' 
    ), 
    array(
     'field' => 'user[email]', 
    ), 
    array(
     'field' => 'user[foo]', 
     //'rules' => 'required' 
    ) 
), 

foo入力はemailフィールドに基づいて必要とされなければなりません。

注:それは、コールバック機能で行うことができますが、それは大きなアプリケーションでは、それは少し難しくなります。何か案が?あなたのAPPPATH.'config/form_validation.php'ファイルセット分離ルールアレイ

$config = array(
    'yes_email' => array(
     array(
      'field' => 'user[phone]', 
      'rules' => 'required' 
     ), 
     array(
      'field' => 'user[email]', 
     ), 
     array(
      'field' => 'user[foo]', 
      'rules' => 'required' 
     ) 
    ), 
    'no_email' => array(
     array(
      'field' => 'user[phone]', 
      'rules' => 'required' 
     ), 
     array(
      'field' => 'user[email]', 
     ), 
     array(
      'field' => 'user[foo]', 
     ) 
    ), 
); 

+0

javascriptまたはjQueryを使用してカスタム検証を記述することができます。 – jagad89

+0

@ jagad89私はすでにAngularjsでjsバリデーションを実装しています。これは、サーバー側の検証に関するものです。 –

+0

CI 3.xを使用している場合は、[こちら](https://www.codeigniter.com/userguide3/libraries/form_validation.html#callable-use-anything-as-a-rule) – jagad89

答えて

3

は、コントローラの使用中に何が今まであなたが望むセットを支配します。 docs

$rule = 'no_email'; // set default value 

switch($this->input->post('email')) { 
    case false: 
     break; 
    default: 
     $rule = 'yes_email'; // email has been posted/needed by app etc. 
} 

より:このチェックの前に例

if ($this->form_validation->run($rule) == FALSE) { 
    $this->load->view('myform'); 
} else { 
    $this->load->view('formsuccess'); 
} 

では、あなたのようなものであり必要なものを支配するかを決定する必要があります。

+0

ありがとうございます。しかし、おそらく、「匿名」関数がこれより良い解決策です。 –

+0

このコードは、既存のCodeIgniterリソース/構造を実装しています。コールバック関数は別の方法です。あなたはどんな使い方もできます。 – Tpojka

関連する問題