代码之家  ›  专栏  ›  技术社区  ›  TheOrdinaryGeek

编码器点火器3路由及404错误处理

  •  1
  • TheOrdinaryGeek  · 技术社区  · 6 年前

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

    example.com/admin/view/form/123网站

    当我访问上面的url时,我可以成功地查看数据。我访问时也看到同样的数据;

    example.com/admin/view/123网址

    注意第三段 /form/ 丢失,但仍返回数据。这就像它忽略了这一点-我认为ci应该抛出404错误,还是需要手动检查?如果是这样,怎么办?

    当我访问这个网址时;

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

    路线 //redirect任何在/form之后包含数字的url $route['admin/view/form/(:num)']=“管理/查看/$1”;

    我的视图文件夹结构如下所示;

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

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

    example.com/admin/view/form/123网站

    example.com/admin/update/form/123

    example.com/admin/delete/form/123网站

    0 回复  |  直到 6 年前
        1
  •  0
  •   louk    6 年前

    你可以用几种方法来做这件事。

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

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

    当输入example.com/admin/view/form/9时,它将重定向到controller admin,function视图,“9”将是参数$form_submission_id

    下面的路线也是一样。

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

    当然,您可以为每个函数创建一个函数,查看、更新、删除…等

    当您输入example.com/admin/view时看到错误是正常的,因为 看法 函数take 1参数$form_submission_id