卡在CodeIgniter控制器类实现中


Stuck in CodeIgniter Controller class implementation

我正在使用CodeIgniter重新编码我的网站。这是我第一次使用MVC或任何其他类型的开发模式。我正在使用CI网站上的视频教程来制作一个游乐场,并熟悉系统的协议。

我刚刚遇到了我的第一个问题,它与父类有关。

我在第二个教程试图做一个博客,有这个:

<?php
class Test extends CI_Controller {
    function Test()
    {
        parent::CI_Controller();
        $this->load->scaffolding('entries');
    }
    function index() 
    {
        $data['muck'] = 'test test test';
        $data['kookoo'] = 'howdy howdy hi';
        $data['hi'] = 'holla';
        $data['yo'] = 'fa la la';
        $data['zoom'] = '1234';
        $data['array'] = array('hi','howdy','hey','sup');
        $this->load->view('test_view', $data);
    }
}
?>

当我加载没有function Test()内内容的页面时,我注意到系统找不到"Controller"。我发现本教程使用的是旧版本的CI,而"CI_Controller"是类Controller的正确名称。现在使用上面的代码,我得到这个错误:

Fatal error: Call to undefined method CI_Controller::CI_Controller() in /Users/michaelsanger/Sites/CodeIgniter/application/controllers/test.php on line 7

我已经搜索过了,我真的不确定为什么它不能定义它。

提前感谢!

你把不同版本的东西混在一起了,1.7版本主要关注php4风格的类构造(使用与类同名的方法作为构造函数,而不是php 5中可用的专用魔法方法__construct())

另外,要注意最新版本中不存在脚手架。你没有说你用的是哪个,我想是V2。如果你使用的是旧版本,1)使用最新的:)2)父类只是Controller.

应该是这样的

class Test extends CI_Controller {
     function __construct()
     {
         parent::__construct();
         //$this->load->scaffolding('entries');
     }
     function Test()
     {
      // this will call a method name test, so maps to a URL like Test/test
     }
}

请注意,它不需要扩展父控制器,除非你想"自动加载"一个库,使其对所有方法可用。

CI以其出色而简单的文档而闻名,因此每当您使用在网上找到的教程时,特别是如果它有点老(在互联网术语中),请养成在您有疑问或问题时转到user_guide的习惯(它也随安装文件一起发送,用于本地浏览)。

例如,检查controllers页面,您很快就会看到代码片段(和教程,截至今天)的问题所在。

更新:

在routes中,你要设置一个映射到控制器(/method)的路由。引用变更日志:

2.0.0版本)

发布日期:2011年1月28日Hg标签:v2.0.0

General changes
PHP 4 support is removed. CodeIgniter now requires PHP 5.1.6.
Scaffolding, having been deprecated for a number of versions, has been removed.

所以我不知道你现在说脚手架是什么意思。看看你的路由,CI期望一个名为"scaffolding_trigger"的控制器,它必须被重路由到控制器"scaffolding"。如果其中任何一个存在,就会得到404错误。请选择一个版本并坚持下去,不要把东西混在一起!不要依赖教程,它们并不总是最新的。