这个例子是一个使用 ci 表单助手的选择下拉列表(我正在从另一个表单修改它,所以希望它都是正确的)
the Array of select values is: $categoryarray
the drop down field name is 'category'
the default value is $defaultcategory
a css class to style (bootstrap etc): $dropclass = 'class="input-medium"';
代码行是:
form_dropdown('category',$categoryarray,set_value('category',$defaultcategory),$dropclass).form_error('category');
form_error('category'); 最后用于显示验证错误消息,即使有默认值 - 如果表单从表单中的另一个字段验证失败 - 这将“记住”用户选择的内容。
编辑 !
好的,有好消息也有坏消息。坏消息 - 如果类别来自数据库,那么您需要再次获取它们。好消息 - CI 会记住用户从下拉列表中选择的类别。
坏消息实际上没什么大不了的 - 如果您在模型中创建类别数组。那么它只是添加到验证中的一行代码。
// In the Model
function makedropdown() {
// get your category list
$cats = $this->getAllCategories() ;
$categoryarray = array();
// make the array
foreach ( $cats->result() as $row ) {
$categoryarray[$row->category] = $row->category ; }
return $categoryarray ;
}
有人填写了表格,我们运行验证,验证失败。在控制器中:
if ( $this->form_validation->run($formrules) == FALSE ) {
// get the categoryarray
$data['categoryarray'] = $this->categorymodel->makedropdown() ;
// load form again
$this->load->view( 'myform', $data ); }
因此,即使我们再次从数据库中获取类别以动态填充选择列表 - CI 仍然会记住用户第一次填写表单时的选择。
那么下拉菜单的默认类别呢?如果它不会改变,那么它可以设置为配置。如果类别值来自数据库并且它们可以更改 - 那么可以在模型中创建默认类别。
编辑 2
天哪,无论如何我总是这样做,所以我为什么不为此想到它。所以是的,这是另一个理由来制作一个特定的方法来显示你的视图
function _showCategoryForm(){
// get the categoryarray
$data['categoryarray'] = $this->categorymodel->makedropdown() ;
// anything else thats needed for the view
// load form view
$this->load->view( 'myform', $data ); }
现在我们没有任何重复的代码,如果需要,可以轻松自定义验证失败并显示错误消息。
// since i'm grinding on this - the validation should happen in a model
// and that method returns true or false
if ( $this->somemodel->validateCategoryForm() == FALSE ) {
// custom obnoxious error message
$this->formerrormessage = "What part of required is eluding you?" ;
$this->_showCategoryForm() ; }
这要好得多,因为如果您的表单需求发生变化 - 变化只在一个地方。我还添加了一个下划线来提醒我们所有私有方法是一种很好的做法。并且表单验证应该在一个模型中分开,由控制器调用。