如何将上传错误输出为flashdata - CodeIgniter

时间:2013-02-27 19:36:32

标签: codeigniter redirect

我想通过将用户重定向回用于上传文件的同一页面来显示上传文件时产生的任何错误。问题是我在该页面上预先填充了一些输入,因此我不能使用redirect(controller/method_to_load_page),因为这不会执行数据填充。

使用$this->load->view('add_page',$error);也不会(我正在使用它的方式),因为尽管会显示错误,但它不会显示带有预先填充数据的输入字段。

这是我的控制器中加载表单以上传文件和其他字段的方法:

public function add_products_page()
    {
        //get each categories subcategory and place them in their own variable
        $data['categories1'] = $this->admin_model->getSubcategories('1');
        $data['error'] = '';
        $this->load->view('add_page',$data);
    }

从该页面,用户可以填写表格并选择图像。然后,表单将在同一个控制器中提交给此方法:

public function add_book()
    {
        $id = $this->admin_model->add_book();

        $config['file_name'] = $id;
        $config['upload_path'] = './images/';
        $config['allowed_types'] = 'jpg';

        $this->load->library('upload', $config);

        if ( ! $this->upload->do_upload())
        {
            $error = array('error' => $this->upload->display_errors());

            $this->load->view('add_page', $error);
        }
        else
        {
            redirect('admin/add_products_page', 'refresh');
        }
    }

如果没有错误,重定向到add_products_page()方法是可以的,但是当出现错误时,会加载视图'add_page'并显示错误,但我的预填充字段不再填充,因为这样做的方法没有被调用。

所以我真的想知道如何通过调用add_products_page方法来填充输入字段来加载我的视图,并在出现错误时显示错误。如果有人可以提供帮助,我会非常感激。

1 个答案:

答案 0 :(得分:0)

为什么要发布到其他方法然后重定向?你可以用同样的方法处理它。

public function add_products_page()
{
    if ($this->input->server('REQUEST_METHOD') == 'POST')
    {
        $result = $this->_add_book();
        if ($result['is_error'])
        {
            // TODO: whatever it takes to show an error message
            $data['error'] = $result['message'];
        }
        else
        {
            // TODO: whatever it takes to show a success message
            $data['error'] = '';
        }
    }

    //get each categories subcategory and place them in their own variable
    $data['categories1'] = $this->admin_model->getSubcategories('1');
    $this->load->view('add_page',$data);
}

public function _add_book() // add underscore so it's not directly accessible
{
    $result = array(
        'is_error' => TRUE,
        'message' => '',
    );

    $id = $this->admin_model->add_book();

    $config['file_name'] = $id;
    $config['upload_path'] = './images/';
    $config['allowed_types'] = 'jpg';

    $this->load->library('upload', $config);

    if ( ! $this->upload->do_upload())
    {
        $error = array('error' => $this->upload->display_errors());

        // set an error message
        $result['message'] = $error;
    }
    else
    {
        // set a success message
        $result['is_error'] = FALSE;
        $result['message'] = 'SOME SUCCESS MSG';
    }

    return $result;
}