2011-02-05 13 views
0

うまくいけば簡単です。私は、次のフォームバリデーションルールを持っている:私はCodeigniter - フォーム検証コールバックの注文

$this->form_validation->set_rules('timeStart', 'Day Start Time', 'trim|required|xss_clean|callback_validtime'); 
    $this->form_validation->set_rules('timeEnd', 'Day End Time', 'trim|required|xss_clean|callback_validtime|callback_validtimeorder'); 
    $this->form_validation->set_rules('interval', 'Interval', 'trim|required|xss_clean|is_natural|callback_valid_interval'); 

問題はcallback_valid_interval$this->input->post('timeStart')$this->input->post('timeEnd')が設定されていることを必要とすることです。現在、私のcallback_valid_interval関数のエラーは、ユーザーがtimeStartまたはtimeEndを完了していない場合に発生します。

ルール間の依存関係を設定する方法はありますか。他のルールが合格していない場合は、callback_valid_intervalを実行しないでください。

また、これらのフィールドを手動でチェックすることもできますが、これを行うより良い方法があるのだろうかと疑問に思っていましたか?

よろしくお願いします。

答えて

1

Codeigniterのルールは、左から右に実行され、失敗するとすぐにチェックを中止し、フィールドに「検証をパスしなかった」とマークし、メッセージを最初に失敗したルールとして設定します。

必要に応じて3つのフィールドがありますので、少なくとも3つのフィールドすべてに何かがある必要があります。各フィールドは独立してチェックされるので、独立したルールを持つ各フィールドよりも複雑な論理チェックを作成することはできません(組み込みのform_validationクラスでは不可能)。

+0

返信いただきありがとうございます。必要に応じて追加検証を追加します。 よろしく、ベン。 – Ben

1

残念ながら、matches[]ルールを除き、CodeIgniterのフォームバリデーションクラスで何もあなたがこれを行うことができない... CI_Form_validation::set_rules以来

は何も返さない、あなたはあなたのif句で使用することはできません。あなたの値が設定されているかどうかを単に確認することをお勧めします。

3回目のルールコールバックが実行されたときに検証されることはありませんので、何でもかまいません。callback_valid_intervalでチェックしてください。このような

何か:

$this->form_validation->set_rules('timeStart', 'Day Start Time', 'trim|required|xss_clean|callback_validtime'); 
$this->form_validation->set_rules('timeEnd', 'Day End Time', 'trim|required|xss_clean|callback_validtime|callback_validtimeorder'); 
if ($this->input->post('timeStart') && $this->input->post('timeEnd')){ 
    $this->form_validation->set_rules('interval', 'Interval', 'trim|required|xss_clean|is_natural|callback_valid_interval'); 
} 
+0

返信いただきありがとうございます。私はそれが事実だと思ったが、二次的意見を得るのは良い。よろしく、ベン。 – Ben

0

場合(真真)メソッドを使用して何をしたいんが、私はあなたがそれが何をするか知っていることを確認します。 set_rulesはルールを評価せず、実行関数だけがルールを評価します。 jfoucherのコードはポスト値を取得し、両方が設定されていない場合は別のルールを作成します。しかし、トリムや他のルール(必要なもの以外)はチェックされません。ただし、このメソッドは機能します。

私が考えることのできる唯一の代替案は、コールバックを書き直すか、form_validationクラスを拡張して独自のルールを作成することです。私は自分のアプリケーションの拡張を行い、より普遍的な検証方法を提供しますが、CodeIgniterのコアを掘り下げる必要があります。

関連する問題