0

codeigniter でモジュラー MVC を使用しています。管理コントローラーを含むモジュール プレイリストがあり、フォーム検証ルールを設定するためのプライベート $rules 変数があります。

同じファイルに作成機能と編集機能の両方があり、両方のフォームを検証しています(1つのファイルform.phpから動的に作成される追加、編集)。

$this->load->library('form_validation');
$this->form_validation->set_rules($this->rules);
$this->form_validation->set_error_delimiters(' <p class="error">', '</p>');

これらは、作成機能と編集機能の両方で使用されます。編集モードで検証したくないフィールドのいくつか。両方に異なるプライベートルールを作成する必要がありますか、それとも私が初めてなので、codeigniter でこれを処理するより良い方法はありますか? ユーザーが編集モードでアップロードする必要がないため、 FILE タグの検証を削除したいと考えています。

ありがとう

4

1 に答える 1

1

これはCIフォーラムからの回答です(元のリンク)。

何らかの形式の階層を使用して、作成/編集のルールを定義できます。

<?php
$this->form_validation->set_group_rules('createModule');
$this->form_validation->set_group_rules('editModule');
if($this->form_validation->run() == FALSE) {
   // whatevere you want
}
?>

または、これを行うこともできます。

<?php
// This will validate the 'accidentForm' first
$this->form_validation->set_group_rules('createModule');
if($this->form_validation->run() == FALSE) {
   // whatevere you want
}
// Now we add the 'locationForm' group of rules
$this->form_validation->set_group_rules('editModule');
// And now we validate *both* sets of rules (remember that the createModule rules are still
// there), but it doesn't necessarily matter, since it will simply redo the 'createModule'
// validation while also doing the 'editModule' validation
if($this->form_validation->run() == FALSE) {
   // whatevere you want
}
?>

以下は、アプリケーション ライブラリ フォルダーに MY_Form_validation.php として保存されている拡張 Form_validation クラスのコードです。

<?php
class MY_Form_validation extends CI_Form_validation {

    /**
     * Set Rules from a Group
     *
     * The default CodeIgniter Form validation class doesn't allow you to
     * explicitely add rules based upon those stored in the config file. This
     * function allows you to do just that.
     *
     * @param string $group
     */
    public function set_group_rules($group = '') {
        // Is there a validation rule for the particular URI being accessed?
        $uri = ($group == '') ? trim($this->CI->uri->ruri_string(), '/') : $group;

        if ($uri != '' AND isset($this->_config_rules[$uri])) {
            $this->set_rules($this->_config_rules[$uri]);
            return true;
        }
        return false;
    }

}

?>
于 2012-06-20T14:02:12.390 に答える