0

我想通过将用户重定向回他们用来上传文件的同一页面来显示上传文件时产生的任何错误。问题是我在该页面上预先填充了一些输入,所以我不能使用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 来填充我的输入字段来加载我的视图,并在它们发生时显示错误。如果有人可以提供帮助,我将不胜感激。

4

1 回答 1

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;
}
于 2013-02-27T20:32:04.370 回答