在codeigniter中找不到404页错误?

时间:2014-10-31 05:32:15

标签: php .htaccess codeigniter mod-rewrite

我刚刚开始使用codeigniter,现在正在处理我的小项目的管理控制。我有客户信息列表。 Client List

当我点击视图&编辑按钮它给我404错误 error page

我在application / config / routes.php中配置了路径

$route['admin/clients'] = 'admin_clients/index';
   $route['admin/clients/add'] = 'admin_clients/add';
   $route['admin/clients/update'] = 'admin_clients/update';
   $route['admin/clients/update/(:any)'] = 'admin_clients/update/$1';
   $route['admin/clients/delete/(:any)'] = 'admin_clients/delete/$1';
   $route['admin/clients/(:any)'] = 'admin_clients/index/$1'; //$1 = page number

重定向到编辑页面的代码

<td class="crud-actions">
                  <a href="'.site_url("admin").'/clients/update/'.$row['id'].'" class="btn btn-info">view & edit</a>  
                  <a href="'.site_url("admin").'/clients/delete/'.$row['id'].'" class="btn btn-danger">delete</a>
                </td>

即使删除工作也没有给我同样的错误。 这是我的.htaccess代码

RewriteEngine on
RewriteBase /testing_palace/
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

这是我的控制器文件

<?php

class Admin_clients extends CI_Controller {

    /**
     * name of the folder responsible for the views 
     * which are manipulated by this controller
     * @constant string
     */
    const VIEW_FOLDER = 'admin/clients';

    /**
     * Responsable for auto load the model
     * @return void
     */
    public function __construct() {
        parent::__construct();
        $this->load->model('admin_client_model');
        if (!$this->session->userdata('is_logged_in')) {
            redirect('admin/login');
        }
    }

    /**
     * Load the main view with all the current model model's data.
     * @return void
     */
    public function index() {

        //all the posts sent by the view
        $search_string = $this->input->post('search_string');
        $order = $this->input->post('order');
        $order_type = $this->input->post('order_type');

        //pagination settings
        $config['per_page'] = 5;

        $config['base_url'] = base_url() . 'admin/clients';
        $config['use_page_numbers'] = TRUE;
        $config['num_links'] = 20;
        $config['full_tag_open'] = '<ul>';
        $config['full_tag_close'] = '</ul>';
        $config['num_tag_open'] = '<li>';
        $config['num_tag_close'] = '</li>';
        $config['cur_tag_open'] = '<li class="active"><a>';
        $config['cur_tag_close'] = '</a></li>';

        //limit end
        $page = $this->uri->segment(3);

        //math to get the initial record to be select in the database
        $limit_end = ($page * $config['per_page']) - $config['per_page'];
        if ($limit_end < 0) {
            $limit_end = 0;
        }

        //if order type was changed
        if ($order_type) {
            $filter_session_data['order_type'] = $order_type;
        } else {
            //we have something stored in the session? 
            if ($this->session->userdata('order_type')) {
                $order_type = $this->session->userdata('order_type');
            } else {
                //if we have nothing inside session, so it's the default "Asc"
                $order_type = 'Asc';
            }
        }
        //make the data type var avaible to our view
        $data['order_type_selected'] = $order_type;


        //we must avoid a page reload with the previous session data
        //if any filter post was sent, then it's the first time we load the content
        //in this case we clean the session filter data
        //if any filter post was sent but we are in some page, we must load the session data
        //filtered && || paginated
        if ($search_string !== false && $order !== false || $this->uri->segment(3) == true) {

            /*
              The comments here are the same for line 79 until 99

              if post is not null, we store it in session data array
              if is null, we use the session data already stored
              we save order into the the var to load the view with the param already selected
             */
            if ($search_string) {
                $filter_session_data['search_string_selected'] = $search_string;
            } else {
                $search_string = $this->session->userdata('search_string_selected');
            }
            $data['search_string_selected'] = $search_string;

            if ($order) {
                $filter_session_data['order'] = $order;
            } else {
                $order = $this->session->userdata('order');
            }
            $data['order'] = $order;

            //save session data into the session
            if (isset($filter_session_data)) {
                $this->session->set_userdata($filter_session_data);
            }

            //fetch sql data into arrays
            $data['count_products'] = $this->admin_client_model->count_clients($search_string, $order);
            $config['total_rows'] = $data['count_products'];

            //fetch sql data into arrays
            if ($search_string) {
                if ($order) {
                    $data['manufacturers'] = $this->admin_client_model->get_clients($search_string, $order, $order_type, $config['per_page'], $limit_end);
                } else {
                    $data['manufacturers'] = $this->admin_client_model->get_clients($search_string, '', $order_type, $config['per_page'], $limit_end);
                }
            } else {
                if ($order) {
                    $data['manufacturers'] = $this->admin_client_model->get_clients('', $order, $order_type, $config['per_page'], $limit_end);
                } else {
                    $data['manufacturers'] = $this->admin_client_model->get_clients('', '', $order_type, $config['per_page'], $limit_end);
                }
            }
        } else {

            //clean filter data inside section
            $filter_session_data['manufacture_selected'] = null;
            $filter_session_data['search_string_selected'] = null;
            $filter_session_data['order'] = null;
            $filter_session_data['order_type'] = null;
            $this->session->set_userdata($filter_session_data);

            //pre selected options
            $data['search_string_selected'] = '';
            $data['order'] = 'id';

            //fetch sql data into arrays
            $data['count_products'] = $this->admin_client_model->count_clients();
            $data['manufacturers'] = $this->admin_client_model->get_clients('', '', $order_type, $config['per_page'], $limit_end);
            $config['total_rows'] = $data['count_products'];
        }//!isset($search_string) && !isset($order)
        //initializate the panination helper 
        $this->pagination->initialize($config);

        //load the view
        $data['main_content'] = 'admin/clients/list';
        $this->load->view('templates/template', $data);
    }

//index

    public function add() {
        //if save button was clicked, get the data sent via post
        if ($this->input->server('REQUEST_METHOD') === 'POST') {


        $config['upload_path'] ='public/images/';
        $config['allowed_types'] = 'gif|jpg|png|jpeg';
        $config['max_size'] = '100';
        $config['max_width']  = '1024';
        $config['max_height']  = '768';

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

            //form validation
            $this->form_validation->set_rules('client_name', 'client_name', 'required');
            $clientLogo='image';
            $this->form_validation->set_error_delimiters('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><strong>', '</strong></div>');


            //if the form has passed through the validation
            if ($this->form_validation->run()) {

                if (!$this->upload->do_upload($clientLogo)) {
                    $error = array('error' => $this->upload->display_errors('<p>', '</p>'));
                    print_r($error);
                }else {
                    //$data = array('upload_data' => $this->upload->data());
                    //print_r($data);
                    $uploadedImg=$this->upload->data();
                    $data_to_store = array(
                        'client_name' => $this->input->post('client_name'),
                        'client_logo'=>  $uploadedImg['client_name']
                    );
                }
                //if the insert has returned true then we show the flash message
                if ($this->admin_client_model->store_clients($data_to_store)) {
                    $data['flash_message'] = TRUE;
                } else {
                    $data['flash_message'] = FALSE;
                }
            }
        }
        //load the view
        $data['main_content'] = 'admin/clients/add';
        $this->load->view('templates/template', $data);
    }

    /**
     * Update item by his id
     * @return void
     */
    public function update() {
        //product id 
        $id = $this->uri->segment(4);

        //if save button was clicked, get the data sent via post
        if ($this->input->server('REQUEST_METHOD') === 'POST') {
            //form validation
            $this->form_validation->set_rules('client_name', 'client_name', 'required');
            if (empty($_FILES['clientLogo']['name'])){
                $this->form_validation->set_rules('clientLogo', 'Client Logo', 'required');
            }
            $this->form_validation->set_error_delimiters('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><strong>', '</strong></div>');
            //if the form has passed through the validation
            if ($this->form_validation->run()) {

                $data_to_store = array(
                    'client_name' => $this->input->post('client_name'),
                    'client_logo'=>self::do_upload($_FILES['clientLogo']['name'])
                );
                //if the insert has returned true then we show the flash message
                if ($this->admin_client_model->update_clients($id, $data_to_store) == TRUE) {
                    $this->session->set_flashdata('flash_message', 'updated');
                } else {
                    $this->session->set_flashdata('flash_message', 'not_updated');
                }
                redirect('admin/clients/update/' . $id . '');
            }//validation run
        }

        //if we are updating, and the data did not pass trough the validation
        //the code below wel reload the current data
        //product data 
        $data['manufacture'] = $this->admin_client_model->get_client_by_id($id);
        //load the view
        $data['main_content'] = 'admin/clients/edit';
        $this->load->view('templates/template', $data);
    }

//update

    /**
     * Delete product by his id
     * @return void
     */
    public function delete() {
        //product id 
        $id = $this->uri->segment(4);
        $this->admin_client_model->delete_clients($id);
        redirect('admin/clients');
    }

//edit


}

请帮我解决这个问题,回复将不胜感激。 谢谢

4 个答案:

答案 0 :(得分:0)

使用以下.htaccess:

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$index.php/$1 [L,QSA]

答案 1 :(得分:0)

@Noor Fathima

请更改路由条件

$route['admin/clients/update/(:any)'] = 'admin_clients/update/$1'; $route['admin/clients/delete/(:any)'] = 'admin_clients/delete/$1'; $route['admin/clients/update'] = 'admin_clients/update'; $route['admin/clients/add'] = 'admin_clients/add'; $route['admin/clients/(:any)'] = 'admin_clients/index/$1'; //$1 = page number $route['admin/clients'] = 'admin_clients/index';

答案 2 :(得分:0)

尝试修改更新函数以传递参数:

公共功能更新($ id = null)

这允许您将值或null传递给函数,并将使用您的路由。

然后你需要删除它:

//product id 
$id = $this->uri->segment(4);

答案 3 :(得分:0)

试试这个:

  1. config.php中使用$config['base_url'] = ''//leave it blank;$config['index_page'] = ''// leave it blank;

  2. 将每个<a href="'.site_url("...")更改为此<?php echo base_url("..."); ?>

  3. 使用site_url()的每个链接都将其更改为base_url()
  4. 看看它是否有效。也许您也可以提供config.php,以便我们可以调试更多。