我正在使用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()
中没有内容的页面时,我注意到系统找不到“控制器”。我发现本教程使用的是较旧版本的CI,并且"CI_Controller“是类控制器的正确名称。现在,使用上面的代码,我得到了这个错误:
Fatal error: Call to undefined method CI_Controller::CI_Controller() in /Users/michaelsanger/Sites/CodeIgniter/application/controllers/test.php on line 7
我已经找过了,真的不确定为什么它不能定义它。
提前感谢!
发布于 2011-10-06 05:26:28
你混淆了来自不同版本的东西,1.7版本主要关注php4风格的类构造(使用与类同名的方法作为构造函数,而不是php5中提供的专用魔法方法__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以其优秀和简单的文档而闻名,所以无论何时你使用网上的教程,特别是如果有点旧(在互联网术语中),养成当你有疑问或问题时去 (它也随安装文件一起提供,用于本地浏览)的习惯。
例如,查看页面,您很快就会看到代码片段(以及教程,从今天起)出了什么问题。
更新:
在您正在设置的路由中,它映射到一个控制器(/method)。引用changelog:
版本2.0.0
发布日期: 2011 -01- 28 Hg Tag: v2.0.0
常规更改删除了对PHP 4的支持。CodeIgniter现在需要PHP5.1.6。Scaffolding已经在许多版本中被弃用,现已被移除。
所以我不明白你说的脚手架是什么意思。看一下您的路由,CI期望一个名为"scaffolding_trigger“的控制器,它必须被重新路由到控制器”搭建“。如果其中任何一个都存在,您就会得到404错误。请选择一个版本并坚持下去,不要混为一谈!不要依赖于教程,它们并不总是最新的变化。
https://stackoverflow.com/questions/7667887
复制相似问题