简体   繁体   中英

Codeigniter 3 Routes and Handling 404 Errors

I am trying to configure pretty URLs in codeigniter and it's not making much sense to me. I'd like my URLs to follow the following structure;

example.com/admin/view/form/123

I can successfully view data when I visit the URL above. I see the same data when I visit;

example.com/admin/view/123

Notice the 3rd segment /form/ is missing, but still returns the data. It's almost like it's ignoring this - I thought CI should throw a 404 error, or do I need to check for this manually? If so, how?

When I visit this URL;

example.com/admin/view

I see the following error;

An uncaught Exception was encountered
Type: ArgumentCountError
Message: Too few arguments to function Admin::view(), 0 passed 

My code can be seen below;

Controller

defined('BASEPATH') OR exit('No direct script access allowed');
class Admin extends CI_Controller

    {
    public function __construct()
        {
        parent::__construct();
        $this->load->helper('url');
        $this->load->database();
        $this->load->model('Admin_model');
        }

    public function index()
        {
        $this->load->view('template/header');
        $data = array(
            'title' => 'Admin Page'
        );
        $this->load->view('admin/index', $data);
        $this->load->view('template/footer');
        }

    public function view($form_submission_id)
        {
        $this->load->view('template/header');
        $data = array(
            'title' => 'Form View Page',
            'record' => $this->Admin_model->getSubmissionById($form_submission_id)
        );
        $this->load->view('admin/view/index', $data);
        $this->load->view('template/footer');
        }
    }

Model

class Admin_model extends CI_Model {

    public function getSubmissionById($form_submission_id) {
        $this->db->select('*');
        $this->db->from('submissions');
        $this->db->where('id', $form_submission_id); 
        $query = $this->db->get();
        return $query->row(); 
    }
}

Routes // redirect any urls that contain a number after /form $route['admin/view/form/(:num)'] = "admin/view/$1";

My views folder structure looks like this;

 - views
 -- admin
     - index.php
     - view
        -- index.php

Ideally I want my URLs to look like this, and throw 404 errors where they don't.

example.com/admin/view/form/123

example.com/admin/update/form/123

example.com/admin/delete/form/123

You can do this by several ways.

The fastest way is by creating routes like this:

$route['admin/view/form/(:num)']   = "Admin/view/$1"; 

When typing exemple.com/admin/view/form/9 , it will redirect to the controller admin, function view and the "9" will be the parameter $form_submission_id

The same thing for routes below.

$route['admin/update/form/(:num)'] = "Admin/update/$1";
$route['admin/delete/form/(:num)'] = "Admin/delete/$1";

of course you could create a function for each one, view, update, delete ... etc

It's normal that you see error when you enter example.com/admin/view because the view function take 1 parameter $form_submission_id

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM