Codeigniter中的路由不一致-路由编码错误

时间:2019-05-24 12:22:40

标签: codeigniter url routing

在codeigniter项目中的route.php中有以下代码。

$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';

$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';

$route['(:any)'] = 'login/view/$1';
$route['default_controller'] = 'login/view';

以下网址可将我正确地转到关于页面(位于此处:views / pages / about.php)

http://localhost:1234/ciblog/index.php/pages/view/about

http://localhost:1234/ciblog/index.php/news 可以正确地带我到新闻页面,该页面位于:views / news / index.php

但是,我想 http://localhost:1234/ciblog/index.php/about 将我带到“关于”页面,而是返回404错误。为了澄清,我不想在URL中键入“页面/视图”以进入“关于”页面。与登录页面相同。我不想键入登录名/视图....即可进入login.php页面。

我认为该行代码被安排为绕行页面/视图(即views / pages目录),以便直接进入about.php页面,但显然我不见了一些逻辑。

Pages.php的控制器如下:

<?php
    class Pages extends CI_Controller{
        public function view($page = 'home')
{
        if ( ! file_exists(APPPATH.'views/pages/'.$page.'.php'))
        {
                // Whoops, we don't have a page for that!
                show_404();
        }

        $data['title'] = ucfirst($page); // Capitalize the first letter

        $this->load->view('templates/header', $data);
        $this->load->view('pages/'.$page, $data);
        $this->load->view('templates/footer', $data);
}
    }

有人可以指出我做错了什么吗,但作为一个可以接受的答案,也可以用简单的术语解释路由的确切工作方式。如果我只是想简单地创建一个新页面,并创建一个路由(url),该路由允许我从localhost / page(即直接)访问该页面,什么是最好的方法?

作为参考,可以在左侧看到目录结构的屏幕截图。

enter image description here

1 个答案:

答案 0 :(得分:0)

您有两条冲突的路线(:any)

$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['login/(:any)'] = 'login/view/$1';
$route['login'] = 'login/view';

$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';

在引导CI期间,COM $route数组将尝试查找当前请求的匹配项。如果找到匹配项,它将使用相应的值作为控制器/方法。


除非您计划这样做,否则您的控制器上不需要“查看”方法。

您可以执行以下操作:

class Pages extends CI_Controller{
  public function index()
  {
    $data['title'] = "Home";
    $this->load->view('templates/header', $data);
    $this->load->view('pages/home', $data);
    $this->load->view('templates/footer', $data);
  }
  public function about()
  {
    $data['title'] = "About";
    $this->load->view('templates/header', $data);
    $this->load->view('pages/about', $data);
    $this->load->view('templates/footer', $data);
  }
}

所以您的路线可能是:

$route['about'] = 'pages/about';
$route['home'] = 'pages/home';
$route['default_controller'] = 'pages/home';

它比较冗长,但易于理解。