Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter 3条路线和404页_Php_Codeigniter_Routing_Uri_Codeigniter 3 - Fatal编程技术网

Php Codeigniter 3条路线和404页

Php Codeigniter 3条路线和404页,php,codeigniter,routing,uri,codeigniter-3,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() {

我正在开发一个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);
    }

}
但是,当我将
/form/
URL段更改为下面这样的随机段时,我仍然可以看到正确的数据

example.com/admin/view/foo/123
  • 为什么会这样
  • 我希望看到404页
  • 为了实现我的目标,我需要改变什么

也许我误解了逻辑,应该以不同的方式设置控制器/路由?

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

因此,在您的代码中:

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

  • 希望它能帮助您澄清此代码

    罗希特-米塔尔的回答很好,而且,
    您可以在管理控制器中更改视图功能,如下所示:

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

    form
    foo
    作为参数传递给您的
    view()
    函数,但由于您的函数不接受任何参数,因此它通过使用
    $this->uri->segment(4)
    仅以一种定义的方式运行。试着做一些类似于查看($action=null)
    的事情,然后做一个
    if($action=='form'){/*do stuff*/}或者{die('not valid!!!');}
    另外,如果你做
    view($action=null,$form\u submission\u id=null)
    那么
    $this->uri->segment(4)
    就不需要了。
    <?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);
     }
    }