找不到codeigniter MY_Controller
Posted
技术标签:
【中文标题】找不到codeigniter MY_Controller【英文标题】:codeigniter MY_Controller not found 【发布时间】:2012-11-09 03:19:21 【问题描述】:我正在为网站使用 Codeigniter.2.1.3,所以我需要扩展 CI_Controller,这样我就可以添加一个与所有控制器一起执行的方法,所以我做了 user_guide 中的操作:
在 application/core 文件夹中创建一个名为 MY_Controller.php 的文件,在其中创建扩展 CI_Controller 的 MY_Controller 类,将我的常规控制器更改为扩展 MY_controller,如下所示: MY_controller.php:
class MY_Controller extends CI_Controller
protected $page;
# Constructor
function __construct ()
parent::__construct();
#code shared with all controllers
public function get_page()
#code to get_the right page here
名为Regular.php的常规控制器:
class Regular extends MY_Controller
public function __construct()
parent::__construct();
public function index()
$this->get_page();
但不断出现以下错误:
致命错误:在第 2 行的 /var/www/immo/CodeIgniter_2.1.3/application/controllers/regular.php 中找不到类“MY_Controller”
【问题讨论】:
在你的应用程序/config/config.php 中你有什么$config['subclass_prefix']
您确定 MY_Controller.php 在 application/core 文件夹中吗?此外,如果您在 linux 上,则可能区分大小写 :) 确保文件名与控制器名称相同。 MY_Controller.php
,不是MY_controller.php
。
在MY_Controller后面加一个空格
@Esailija $config['subclass_prefix'] = "MY_"
@Jeemusu:是的,它在应用程序/核心文件夹中
【参考方案1】:
您需要包含您的 MY_Controller
类或自动加载它。我建议您通过将以下内容添加到您的 application/config/config.php
文件来自动加载它。
function __autoload($class)
if (strpos($class, 'CI_') !== 0)
if (file_exists($file = APPPATH . 'core/' . $class . EXT))
include $file;
【讨论】:
为什么我在扩展库时需要这样做,我不需要自动加载它,为什么这是不同的,并且在文档中没有任何内容。 这是由 Phil Sturgeon 创建的关于该技术的原始文章 - philsturgeon.co.uk/blog/2010/02/… 现在仍然无法正常工作,它给了我 2 个新警告:include_once(application/core/MY_Controller.php): failed to open stream: No such file or directory include_once(): 未能打开 'application/core/MY_Controller.php' 以包含 (include_path='.:/var/www/ZendFramework/library') 不知道这意味着在应用程序/核心中有文件 MY_Controller.php 并且它是可读的。【参考方案2】:确保文件名大小写正确。 Linux 服务器区分大小写。所以如果类名是 My_Controller 那么文件名应该是 My_Controller.php
【讨论】:
里面的控制器类名是什么并不重要。只需拥有MY_Controller.php
即可解决问题。就我而言,我的控制器的名称是 CRM_controller.. :)【参考方案3】:
$config['subclass_prefix'] = "MY_"
在config.php
中检查,当然您应该在控制器名称中使用它,例如MY_Controller.php
并命名为“class MY_Controller....”
【讨论】:
【参考方案4】:在config/config.php
/* load class in core folder */
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');
【讨论】:
尽管所有其他解决方案确实有点道理,但这是唯一真正有帮助的解决方案。我相信核心文件夹中的类在我的情况下不会超载,因为我从 2.x 升级到 CodeIgnitor 3.x(但这需要确认)并且我可能在此过程中忘记了一些东西......【参考方案5】:这个答案迟到了,但我得到了
“致命错误:找不到类‘MY_Controller’”错误
当我在 web 根目录而不是 application/controllers 目录中有一个同名的控制器 (.php
) 文件时。
实际上不知道它是如何到达那里的,但是当我删除它时问题就消失了。
【讨论】:
以上是关于找不到codeigniter MY_Controller的主要内容,如果未能解决你的问题,请参考以下文章
CodeIgniter:在 Live Server 上找不到 404 页面