0

我正在尝试使 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">&times;</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);?>
4

3 回答 3

0

在 if 条件下$this->form_validation->run == false写:

$this->data['pages_no_parents'] = $this->page_m->get_no_parents();
于 2013-08-07T14:01:03.470 回答
0

你可以试试这样的

if($this->form_validation->run() == FALSE)
{ 
    redirect('your_controller/function','refresh');
}

更新

所以而不是重定向做加载视图像

$this->load->view('admin/_layout_main', $this->data);

并在视图页面中做一件事

<?php echo validation_errors(); ?>

如果您遇到任何问题,请告诉我。

于 2013-08-07T15:12:07.630 回答
0

正如艾哈迈德所提到的,我认为我正在覆盖某些东西,在删除设定值并将视图更改为此之后,现在可以了。

<?php echo form_dropdown('parent_id', $pages_no_parents, $this->input->post('parent_id') ? $this->input->post('parent_id') : $page->parent_id);  ?>

感谢大家的评论和回答。

于 2013-08-09T10:37:01.343 回答