Codeigniter 3路线和404页

时间:2019-03-11 16:39:06

标签: php codeigniter routing uri codeigniter-3

我正在开发一个Web应用程序,我对路由及其工作方式有些困惑。

我的Web应用程序有一个管理区域,URL结构如下;

example.com/admin/view/form/123

我的Admin控制器看起来像这样;

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Admin extends CI_Controller {

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

    public function view() {
        $form_submission_id = $this->uri->segment(4);
        $records = $this->Admin_model->getDetails($form_submission_id);
        $data = array(
            'title'         =>  'Form Details',
            'records'       =>  $records
        );
        $this->load->view('admin/view/index', $data);
    }

}

我没有任何自定义路线设置。

当我访问以下URL时,可以成功看到页面和相应的数据;

example.com/admin/view/form/123

但是,当我将/form/ URL段更改为如下所示的随机内容时,我可以仍然查看正确的数据;

example.com/admin/view/foo/123
  • 这是为什么?
  • 我希望看到404页?
  • 为了实现自己的目标,我需要更改什么?

也许我对逻辑有误解,应该对控制器/路由进行不同的设置吗?

2 个答案:

答案 0 :(得分:1)

Codeigiter URL的结构为domain/controllerName/actionName/param1/param2,依此类推。在您的代码URL中,example.com/admin/view/form/123 admin是控制器,view是动作名称,form123是您使用get方法传递的参数。您可以像$this->uri->segment(3)这样访问这些参数。

因此在您的代码中:

  1. 它不会显示任何错误,因为您的函数甚至没有使用3rd URI段。
  2. 由于找到正确的控制器和操作,它不会显示404页面。
  3. 要实现与域相关的功能,您需要相应地更改功能代码或为此使用路由。

希望它可以帮助您阐明此代码。

答案 1 :(得分:0)

Rohit Mittal的回答也很好,
您可以在管理器中更改视图功能,如下所示:

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

public function view($form = null,$form_submission_id = null) {
    if($form == "form" && $form_submission_id){
    $records = $this->Admin_model->getDetails($form_submission_id);
    $data = array(
        'title'         =>  'Form Details',
        'records'       =>  $records
    );
    $this->load->view('admin/view/index', $data);
 }
}