使用CodeIgniter进行路由,使用正确的$ routes获取404

时间:2011-11-08 14:23:18

标签: php codeigniter codeigniter-routing

使用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使用文件名来查看它必须加载的内容。小心。

3 个答案:

答案 0 :(得分:0)

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

在找到index.php脚本之前,并非所有默认服务器配置都会上传。

答案 1 :(得分:0)

如果您的控制器文件名为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 :(得分:0)

没有直接关联,但您应该查看CodeIgniter Style Guide

方法名称应小写,单词用下划线('_')分隔。你可能不喜欢它并且发现它很痛苦 - 你知道在哪里 - 但是相信我坚持标准总是最好的想法,而且它看起来很好并且与第三方库/插件/助手一致。

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