DataMapper的验证与表单验证 - 笨
问题描述:
我使用这个DataMapper的http://datamapper.wanwizard.euDataMapper的验证与表单验证 - 笨
问题的DataMapper有笨的形式validation.but相似不是相同的验证方法。
一个例子,一个模型管理员模型验证阵列:
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]'
)
);
我并不想为新的管理员两次人工验证添加(首先表单验证,在datamapper验证之后)。我认为有一种方法可以通过一次手动验证来实现。
对不起我英语不好,我希望你能理解。提前致谢。
答
仅使用Datamapper的验证就足够了,没有CI的表单库。
当您尝试保存模型时,save()
方法将返回true
或false
,具体取决于保存是否成功。如果不是该模型的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>
可以使用相同的形式时,在不存在以前的型号数据库,只需创建您需要的模型的空实例,并将其传递给表单。