我正在使用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
我已经洗过,我真的不确定为什么它无法定义它。
提前感谢!
答案 0 :(得分:4)
你正在混合不同版本的东西,1.7主要集中在PHP4风格的类构造上(使用与类相同的方法作为构造函数,而不是php中可用的专用魔术方法__construct()) 5)
另外,请注意最新版本中没有脚手架。你没有说你在使用哪一个,我想V2。如果您使用的是旧版本,1)使用最新版本:) 2)父类只是控制器。
应该是这样的
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页面,您很快就会看到您的代码段(以及今天的教程)出现了什么问题
<强>更新强>
在您设置路线的路线中,映射到控制器(/方法)。 引用更改日志:
版本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错误。 请选择一个版本并坚持下去,不要混淆!并且不依赖于教程,它们并不总是与最新的变化保持同步。