我正在尝试使 form_dropdown 适应我在 codeigniter 中的表单。当我添加一个新页面时,它不会在父下拉部分中显示任何错误,但在表单验证之后,例如,如果用户忘记输入标题标签,如果它为空,或者在验证后它会在下拉部分。
我已经读过,form_dropdown 的第二个变量必须是数组,依此类推。但是我的是数组,并且在验证之前没有在页面中给出任何错误。所以我无法弄清楚问题所在。
A PHP Error was encountered
Severity: Warning
Message: Invalid argument supplied for foreach()
Filename: helpers/form_helper.php
Line Number: 331
MY_控制器:
class MY_Controller extends CI_Controller{
public $data = array();
function __construct(){
parent::__construct();
}
}
管理员控制器:
class Admin_Controller extends MY_Controller{
function __construct(){
parent::__construct();
$this->data['meta_title'] = 'My Website Control Panel';
$this->load->helper('form');
$this->load->library('form_validation');
$this->form_validation->set_error_delimiters(' <div class=" alert alert-danger alert-block" ><span class="glyphicon glyphicon glyphicon-minus-sign"></span> ', '<span class="close" data-dismiss="alert">×</span></div>');
$this->load->library('session');
$this->load->model('user_m');
$exceptions = array('admin/user/login', 'admin/user/logout');
if(in_array(uri_string(),$exceptions) == FALSE){
if($this->user_m->loggedin() == FALSE){
redirect('admin/user/login');
}
}
}
}
控制器 :
class Page extends Admin_Controller{
public function __construct(){
parent::__construct();
$this->load->model('page_m');
}
public function index(){
$this->data['pages'] = $this->page_m->get_with_parent();
$this->data['subview'] = "admin/page/index";
$this->load->view('admin/_layout_main',$this->data);
}
public function edit ($id = NULL)
{
// Fetch a page or set a new one
if ($id) {
$this->data['page'] = $this->page_m->get($id);
count($this->data['page']) || $this->data['errors'][] = 'Not found.';
}
else {
$this->data['page'] = $this->page_m->get_new();
}
// Pages for dropdown
$this->data['pages_no_parents'] = $this->page_m->get_no_parents();
// Set up the form
$rules = $this->page_m->rules;
$this->form_validation->set_rules($rules);
// Process the form
if ($this->form_validation->run() == TRUE) {
$data = $this->page_m->array_from_post(array('title', 'slug', 'body','keywords','description','parent_id'));
$this->page_m->save($data, $id);
redirect('admin/page');
}
// Load the view
$this->data['subview'] = 'admin/page/edit';
$this->load->view('admin/_layout_main', $this->data);
}
}
模型:
public function get_no_parents ()
{
// Fetch pages without parents
$this->db->select('id, title');
$this->db->where('parent_id', 0);
$pages = parent::get();
// Return key => value pair array
$array = array(
0 => ''
);
if (count($pages)) {
foreach ($pages as $page) {
$array[$page->id] = $page->title;
}
}
return $array;
}
看法 :
<?=form_dropdown('parent_id', $pages_no_parents, set_value('parent_id', $pages_no_parents, $this->input->post('parent_id') ? $this->input->post('parent_id') : $page->parent_id);?>