Codeigniter 3路由和处理404错误

时间:2019-02-27 15:19:42

标签: php codeigniter codeigniter-3

我正在尝试在codeigniter中配置漂亮的URL,对我来说这没有多大意义。我希望我的网址遵循以下结构;

  

example.com/admin/view/form/123

当我访问上面的URL时,我可以成功查看数据。我访问时看到的数据相同;

  

example.com/admin/view/123

请注意,缺少第三个句段/form/,但仍返回数据。几乎就像是忽略了这一点-我认为CI应该抛出404错误,还是我需要手动检查此错误?如果可以,怎么办?

当我访问此URL时;

  

example.com/admin/view

我看到以下错误;

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

我的代码可以在下面看到;

控制器

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');
        }
    }

模型

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(); 
    }
}

路线     //重定向/ form之后包含数字的所有url     $ route ['admin / view / form /(:num)'] =“ admin / view / $ 1”;

我的views文件夹结构如下:

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

理想情况下,我希望我的网址看起来像这样,并在不希望出现的地方抛出404错误。

  

example.com/admin/view/form/123

     

example.com/admin/update/form/123

     

example.com/admin/delete/form/123

1 个答案:

答案 0 :(得分:0)

您可以通过几种方法来做到这一点。

最快的方法是创建这样的路由:

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

键入exemple.com/admin/view/form/9时,它将重定向到控制器admin,功能视图,“ 9”将是参数$ form_submission_id

下面的路线也是一样。

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

当然您可以为每个功能创建一个功能,查看,更新,删除...等

通常情况下,输入example.com/admin/view时会看到错误,因为 view 函数带有1个参数$ form_submission_id