1

私はこのデータマッパーを使用していますhttp://datamapper.wanwizard.eu

問題は datamapper が codeigniter フォーム検証と同様の検証方法を持っていることですが、同じではありません。

例、モデル管理者モデル検証配列:

public $validation = array(
        'username' => array(
        'rules' => array('unique', 'required', 'trim', 'max_length' => 60, 'min_length' => 3),
        'label' => 'User'
    ),
        'password' => array(
        'rules' => array('required', 'trim', 'encrypt', 'min_length' => 6),
        'label' => 'Password'
    )
);

ただし、フォーム検証配列は次のようにする必要があります。

public $form_validation = array(
    array(
        'field' => 'username',
        'label' => 'User',
        'rules' => 'unique|required|trim|max_length[60]|min_length[3]'
    ),
    array(
        'field' => 'password',
        'label' => 'Password',
        'rules' => 'required|trim|encrypt|min_length[6]'
    )
);

新しい管理者の追加に対して 2 つの手動検証を行いたくありません (最初のフォーム検証、datamapper 検証後)。1回の手動検証だけでこれを行う方法があると思います。

下手な英語で申し訳ありませんが、ご理解いただければ幸いです。前もって感謝します。

4

1 に答える 1

2

CIのフォームライブラリがなくても、Datamapperの検証のみを使用するだけで十分です。

モデルを保存しようとすると、保存が成功したかどうかに応じて、save()メソッドはtrueまたはを返します。falseそうでない場合は、モデルのerrorプロパティに、失敗した検証用に生成されたエラーメッセージを入力する必要があります。メッセージは、適切な名前のキーを持つ言語ファイルからロードできます。また、codeigniterのフォーム検証ライブラリform_validaton_lang.phpもロードされます。

コントローラでは、次のようにそれらを利用できます。

Class TheController extends CI_Controller {
    function save() {
        // get the model object somehow
        // ...
        // update attributes
        $model->prop0 = $this->input->post('prop0');            
        $model->prop1 = $this->input->post('prop1');
        // try to save it
        if ($model->save()) {
            // save successful
            redirect(...);
        } else {
            // save failed load form again, with the model
            $this->load->view('path/to/the/form', array('model' => $model));
        }
    }
}

ビューは次のように機能します。

 <form method="post" action="...">

     <label>prop0</label>
     <input type="text" name="prop0" value="<?php print $model->prop0?> ">
     <?php if (!empty($model->error->prop0)):?> 
         <div class="error"><?php print $model->error->prop1; ?></div>
     <?php endif; ?>

     <label>prop1</label>
     <input type="text" name="prop1" value="<?php print $model->prop1?> ">
     <?php if (!empty($model->error->prop0)):?> 
         <div class="error"><?php print $model->error->prop1; ?></div>
     <?php endif; ?>

     <buton type="submit">go</button>
 </form>

データベースに以前のモデルが存在しない場合でも同じフォームを使用できます。必要なモデルの空のインスタンスを作成し、それをフォームに渡します。

于 2012-08-08T14:57:11.637 に答える