CodeIgniter - 无法将id参数添加到redirect()

时间:2015-10-08 16:07:31

标签: php codeigniter redirect

我有以下控制器代码用于编辑供应商表格:

public function edit($supplier_id = NULL) {

    if ($this->session->userdata ( 'username' ) === NULL) {
        redirect ( 'login' );
    } else {

        // set validation rules
        $this->form_validation->set_rules ( 'suppliers', 'Department', 'callback_combo_check' );
        $this->form_validation->set_rules ( 'nome', 'Employee No', 'trim|required' );
        $this->form_validation->set_rules ( 'morada', 'Employee Name', 'trim|required' );
        $this->form_validation->set_rules ( 'cp', 'Employee Name', 'trim|required' );
        $this->form_validation->set_rules ( 'localidade', 'Designation', 'trim|required' );

        if ($this->form_validation->run () == FALSE) {

            $data['supplier_data'] = $this -> Suppliers_model -> get_supplier($supplier_id);

            if (empty($data['supplier_data'])) {
                show_404();
            }

            $this->lang->load ( 'suppliers' );

            $data['suppliers'] = $this->Suppliers_model->get_suppliers();

            $data ['title'] = 'Dashboard';

            $this->load->view ( 'templates/head', $data );
            $this->load->view ( 'templates/menu' );
            $this->load->view ( 'suppliers/edit', $data );
            $this->load->view ( 'templates/scripts' );
            $this->load->view ( 'templates/footer' );

        } else {

            // pass validation
            $up_data = array (
                    'Tipo_Fornecedor' => $this->input->post ( 'suppliers' ),
                    'Nome_Fornecedor' => $this->input->post ( 'nome' ),
                    'Morada_Fornecedor' => $this->input->post ( 'morada' ),
                    'Codigo_Postal' => $this->input->post ( 'cp' ),
                    'Localidade' => $this->input->post ( 'localidade' )
            );

            // insert the form data into database  
            $this->db->where('Codigo_Fornecedor', $supplier_id);
            $this->db->update( 'tabela_fornecedores', $up_data );

            // display success message
            $this->session->set_flashdata ( 'msg', '<div class="alert alert-success text-center">Supplier details updated to Database!!!</div>' );

            redirect ('suppliers/edit/'.$supplier_id);

        }       

    }
}

结果应该是在更新数据库之后,使用OK消息返回编辑表单,就像控制器内部一样。 问题是,当我将结尾重定向到url时,在这种情况下它会重定向到自身,重定向会丢失$ suppliers_id参数,因此控制器会遇到404错误,因为它无法找到供应商的ID。

实施例: www.site.com/suppliers/edit/1

1是供应商ID,它正确加载页面,我更改我需要的任何内容,提交表单,值更新,但当它点击重定向部分

redirect ('suppliers/edit/'.$supplier_id);

它访问www.site.com/suppliers/edit/,因为没有id它会在页面开头点击404_show函数。

我做错了什么,为什么使用$ suppliers_id的重定向会失败?

祝你好运

Nuno Reis

网址的路由规则

$route['suppliers/edit/(:any)'] = 'suppliers/edit/$1';

1 个答案:

答案 0 :(得分:0)

您输入的第一个。

问题是:

当打开要编辑的页面时,我从uri段/ $ id(/ 3)获得了id。 在强制执行以后的{}部分声明时,链接上没有$ id,给出了404错误。

我刚刚在加载edir表单时存储/ $ id的表单中添加了一个隐藏字段。 发布后,到达else {}从帖子中获取$ id,然后将其用于查询和重定向。

现在一切正常。

再一次回复。

祝你好运

Nuno Reis