4

最初のセットの検証が失敗すると、2 番目の検証セットが実行されないように、Codeigniter プロジェクトで一連のフォーム検証ルールを作成しようとしています。

CIマニュアルでこれを見つけました:

$config = array(
             'signup' => array(
                                array(
                                        'field' => 'username',
                                        'label' => 'Username',
                                        'rules' => 'required'
                                     ),
                                array(
                                        'field' => 'password',
                                        'label' => 'Password',
                                        'rules' => 'required'
                                     ),
                                array(
                                        'field' => 'passconf',
                                        'label' => 'PasswordConfirmation',
                                        'rules' => 'required'
                                     ),
                                array(
                                        'field' => 'email',
                                        'label' => 'Email',
                                        'rules' => 'required'
                                     )
                                ),
             'email' => array(
                                array(
                                        'field' => 'emailaddress',
                                        'label' => 'EmailAddress',
                                        'rules' => 'required|valid_email'
                                     ),
                                array(
                                        'field' => 'name',
                                        'label' => 'Name',
                                        'rules' => 'required|alpha'
                                     ),
                                array(
                                        'field' => 'title',
                                        'label' => 'Title',
                                        'rules' => 'required'
                                     ),
                                array(
                                        'field' => 'message',
                                        'label' => 'MessageBody',
                                        'rules' => 'required'
                                     )
                                )                          
           );
$this->form_validation->set_rules($config);

各セットの検証を個別に実行できるようになったことはわかっています (この場合、$this->form_validation->run('signup') および $this->form_validation->run('email'))。

問題は、 $config 配列を使用すると、フォームの投稿が失敗している間、エラーがフォーム検証クラスに追加されない (したがって表示されない) ことです。一連のルールを使用せずに $this->form_validation->set_rules() メソッドのみを使用すると、エラーが追加されて表示されました。

一連のルールを使用しているときに無効なフォーム データを入力しても、エラー メッセージが追加されないのはなぜですか?

4

4 に答える 4

1

$config 配列は、application/config ディレクトリの form_validation.php というファイルにある必要があります。その後、CI がロードされるときに自動的にロードされ、作成時にフォーム検証オブジェクトに渡されます。

FV オブジェクトの run() メソッドが初めて呼び出されたときに、FV オブジェクトにルールが設定されていない場合は、作成時に指定された構成ルールを検索し、引数として渡された名前でインデックス付けされたグループを使用します走る()。グループ名が異なっていても、CI アプリケーションの同じ呼び出しで後で run() を呼び出すと、ルールが設定されているため、このチェックがバイパスされます。つまり、呼び出しでルール グループを設定できるのは 1 回だけです。

したがって、ルールの 2 つのグループを作成して、次々と呼び出すことはできません。どちらか一方または他方を呼び出すことができます。

set_rule() を使用してルールをカスケードする方がよい場合があります。つまり、set_rule() を使用していくつかのルールを追加し、それらに対して検証します。合格した場合は、いくつかのルールを追加して検証を再試行します。古いルールが合格することを知って、効果的に古いルールを繰り返しますが、それは失敗が新しいルールの結果であることを意味します.

于 2012-12-19T12:05:43.797 に答える