调用未定义的方法CI_Controller :: Controller()

时间:2012-02-16 15:56:37

标签: php codeigniter-2

我有这个控制器:

    class Start extends CI_Controller{
   var    $base;
   var    $css;

   function Start()
   {
       parent::Controller(); //error here.
       $this->base = $this->config->item('base_url'); //error here
       $this->css = $this->config->item('css');   

   }

  function hello($name)
  {
    $data['css'] = $this->css;
    $data['base'] = $this->base;
    $data['mytitle'] = 'Welcome to this site';
    $data['mytext'] = "Hello, $name, now we're getting dynamic!";
    $this->load->view('testView', $data);
   }
}

它告诉我这一行:

父::控制器(); //错误在这里。

 Call to undefined method CI_Controller::Controller() 

如果我删除该行..我的下一行显示错误...

Call to a member function item() on a non-object

如何防止此类错误发生?

3 个答案:

答案 0 :(得分:25)

如果您使用的是CI 2.x,那么您的类构造函数应如下所示:

   public function __construct()
   {
        parent::__construct();
        // Your own constructor code
   }

user guide

中阅读更多内容

答案 1 :(得分:3)

在CodeIgniter 2中,构造函数名为__constructor,而不是类名。因此,您需要拨打parent::__construct()而不是parent::Controller()

以下是您可以阅读的文章,其中显示了CodeIgniter 1.x和CodeIgniter 2.x之间的一个主要区别

http://ulyssesonline.com/2011/03/01/differences-between-codeigniter-1-7-2-and-2-0-0/

答案 2 :(得分:0)

如果您通过 Xampp 或类似服务器运行 Codeigniter 项目,请将以下代码添加到以下目录中的 config.php 文件底部; ci_project/application/config/config.php

function my_load($class) {        

    if (strpos($class, 'CI_') !== 0) {            
        if (is_readable(APPPATH . 'core' . DIRECTORY_SEPARATOR . $class . '.php' )) {                
            require_once (APPPATH . 'core' . DIRECTORY_SEPARATOR . $class . '.php');                
        }
    }

}

spl_autoload_register('my_load');

上面的代码将有助于;在核心文件夹中加载类。 我确定这在以下设置中有效; CI-3+、Xampp、Php5.6 或 5.6+

此外,您可以决定创建并允许其他类引用您自己的控制器(它扩展了原始 CI_Controller),方法是在以下目录中创建一个名为 MY_Controller.php 的文件:ci_project/application/core/ 并添加以下内容里面的代码;

<?php
    class MY_Controller extends CI_Controller {

    }
?>

这样您就可以在整个项目的其余部分始终引用或扩展其他类到您自己的控制器(MY_Controller),例如

class Admin extends MY_Controller {
    //your function here
}

我希望这会有所帮助。