Har*_*ten 12 php extends controller codeigniter
在Codeigniter 2.1.2中,我想创建基本控制器,然后从该控制器扩展.它不起作用,我不明白为什么,我现在非常绝望.
在\ application\core\MY_Base_Controller.php我有这个:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Base_Controller extends CI_Controller
{
function __construct()
{
parent::__construct();
...
Run Code Online (Sandbox Code Playgroud)
在\ application\controllers\Home.php 我有这个:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Home extends MY_Base_Controller {
Run Code Online (Sandbox Code Playgroud)
并且错误消息是
致命错误:第3行的......\application\controllers\Home.php中找不到类'MY_Base_Controller'
我不知道该怎么做,我在互联网上读到我必须将基本控制器放到核心文件夹我做了什么,我必须用前缀MY_命名基本控制器,我做了.但它仍然没有用.在我的config.php中也是这一行
$config['subclass_prefix'] = 'MY_';
Run Code Online (Sandbox Code Playgroud)
我使用xampp在localhost上运行它
谢谢您的帮助
编辑
有人可以请关注以下链接尝试,并告诉我什么是错的.我刚刚下载了codeigniter试图创建基本控制器并扩展欢迎控制器.不工作.在下面的rar中,只有修改过的文件.谢谢你 http://goo.gl/sKHkDl
编辑2
我可以通过将MY_Base_Controller重命名为MY_Controller来实现此功能.这是否意味着,我只能为控制器创建一个扩展类?例如.我不能拥有
只是而且只有MY_Controller?
Web*_*ith 15
我在第一个CI应用程序中遇到了同样的问题,发现需要检查的两个关键元素:
1.案例匹配: 根据您的服务器配置,目录中文件的名称需要与您的类的案例相匹配.例如,在您的类被称为"MY_Controller"的地方,您的文件名将需要是:Linux服务器上的"MY_Controller.php".已知Windows服务器存在大写文件名问题,因此您可以尝试命名控制器"my_controller.php"和/或在config.php中将扩展名更改为"my_"而不是"MY_"
2.插入自动加载功能 由于我不知道的原因,Codeigniter在首次加载核心类之前不会自动识别和读取扩展核心类.这可能会导致您的扩展程序无法正确加载.要解决此问题,您可以将此简单的自动加载脚本添加到config.php的最底部
/*
|--------------------------------------------------------------------------
| Autoload Custom Controllers
|--------------------------------------------------------------------------
|
*/
function __autoload($class) {
if (substr($class,0,3) !== 'CI_') {
if (file_exists($file = APPPATH . 'core/' . $class . EXT)) {
include $file;
}
}
}
Run Code Online (Sandbox Code Playgroud)
附注:上面的解决方案在CodeIgniter 2.1.4上进行了测试.问题涉及CodeIgniter 2.1.2
Bri*_*sey 10
任何人使用CI 3+阅读此内容并尝试尝试同样的事情.请注意,在删除php 4支持时,全局EXT已被折旧.您现在需要使用以下内容:
/*
|--------------------------------------------------------------------------
| Autoload Custom Controllers
|--------------------------------------------------------------------------
|
*/
function __autoload($class) {
if (substr($class,0,3) !== 'CI_') {
if (file_exists($file = APPPATH . 'core/' . $class . '.php')) {
include $file;
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
我遇到了同样的问题,但如果我在MY_Controller.php文件中创建了所有控制器,那么一切都运行良好.
<?php
class MY_Controller extends CI_Controller
{
function __construct()
{
parent::__construct();
// do some stuff
}
}
class MY_Auth_Controller extends MY_Controller
{
function __construct()
{
parent::__construct();
// check if logged_in
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24728 次 |
| 最近记录: |