使用表单验证的Datamapper验证 - Codeigniter

时间:2012-08-08 14:07:05

标签: php codeigniter validation codeigniter-datamapper

我正在使用此数据映射器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]'
    )
);

我不想为新的管理员添加进行两次手动验证(在数据映射器验证之后进行第一次表单验证)。我认为只需一次手动验证即可实现这一目标。

抱歉,我的英语不好,希望你能理解。提前谢谢。

1 个答案:

答案 0 :(得分:2)

仅使用Datamapper的验证就足够了,没有CI的表单库。

当您尝试保存模型时,save()方法将返回truefalse,具体取决于保存是否成功。如果不是模型的error property应填充为失败的验证生成的错误消息。消息可以从language files with keys named appropriately加载,同时也会加载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>

当数据库中不存在先前的模型时,可以使用相同的表单,只需创建所需模型的空实例,然后将其传递给表单。

相关问题