【问题标题】:Routing with CodeIgniter, getting 404 with correct $routes使用 CodeIgniter 进行路由,使用正确的 $routes 获得 404
【发布时间】:2011-11-08 14:23:18
【问题描述】:

使用 CodeIgniter,我的代码出现了奇怪的行为。我想要的是在我的数据库中列出一种人,当我输入给定人的 id 时,会出现一个页面,其中包含我们在数据库中获得的有关此人的所有信息。

只是一件简单的事情。我成功完成了新闻官方教程的事情,但它根本不起作用!

我写了一个名为 Person 的控制器继承类,带有 viewPersonById 方法,就像这样:

class Person extends CI_Controller{

      public function __construct()
      {
      parent::__construct();
      $this->load->model('Person_Model');
}

public function index()
{

}

public function viewPersonById($parId){
    $data['person'] = $this->Person_Model->get($parId);

    $data['title'] = 'Person information';

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

我的 routes.php 是这样写的:

$route['people/(:any)'] = 'Person/viewPersonById/$1';

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

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

当我在浏览器中输入http://127.0.0.1:8888/ci/index.php/people/1 时,我得到的只是 404。我的代码有什么问题?我看不到。

有什么想法吗?感谢并为我糟糕的英语感到抱歉。

编辑:

好的,伙计们,我发现出了什么问题。我觉得自己是有史以来最大的笨蛋,因为我的文件名很奇怪,比如“person.controler.php”和“person.model.php”。您的控制器名称和您在 routes.php 中输入的内容必须完全匹配

所以我只需将 person.controler.php 重命名为 person.php 并将 person.model.php 重命名为 person_model.php,这样模型就可以在控制器中加载。 CI 使用文件的名称来查看它必须加载的内容。小心点。

【问题讨论】:

    标签: php codeigniter codeigniter-routing


    【解决方案1】:

    如果你的控制器文件名是person.php,那么你应该改变:

    $route['people/(:any)'] = 'Person/viewPersonById/$1';

    $route['people/(:any)'] = 'person/viewPersonById/$1';

    小写 p 个人。

    PS:尝试打开http://127.0.0.1:8888/ci/index.php/Person/viewPersonById/1,你就知道问题了

    【讨论】:

    • 就是这样,我在你之前几分钟就找到了答案,但是谢谢伙计!
    【解决方案2】:

    听起来你的 .htaccess 没有设置或被读取。

    在找到您的 index.php 脚本之前,并非所有默认服务器配置都会沿用该路径。

    【讨论】:

    • 好的,谢谢。但是你说的是哪种 .htaccess 呢?我需要在根文件夹中创建一个吗?所以默认情况下CI中的路由不起作用?
    • @turbodoom,这真的与 Code Igniter 无关。您的 Web 服务器不会访问 index.php,除非它已被指示这样做。您可以在 Apache 配置或 .htaccess 中执行此操作。如果您在 IIS 上托管,使用 IIS 7 是最简单的,您需要设置 web.config。
    【解决方案3】:

    没有直接关系,但你应该看看CodeIgniter Style Guide

    方法名称应小写,单词之间用下划线('_')分隔。你可能不喜欢它并且觉得它很痛苦 - 你知道在哪里 - 但相信我坚持标准始终是最好的主意,而且它看起来不错并且与第三方库/插件/帮助程序一致。

    另外,您不希望自定义路由 every 控制器的 every 方法。而且您也不希望您的网址中包含大写字符

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-02
      • 2019-03-19
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多