不可否认,我的OOPHP有点摇摇欲坠,但我不知道这有什么不对。在我的一个控制器中,我包括一个工具单,与控制器一样,它扩展了基类CI_Controller
类。这引发致命错误:
Fatal error: Cannot redeclare class Utils in {file path}\utils.php on line 88
控制器:
class Dashboard extends CI_Controller {
public function __construct() {
//call parent constructor
parent::__construct();
//load utils
require 'application/helpers/utils.php'; //<-- utils loaded
$this->utils = new Utils(); //<-- utils instantiated
//load Dashboard model
$this->utils->load->model('dashboard');
}
//etc...
}
utils.php中:
class Utils extends CI_Controller {
//prep for forms (on join or login views)
public function prep_form() {
$this->load->helper('form');
$this->load->library('form_validation');
$this->form_validation->set_error_delimiters('<li>', '</li>');
}
//etc - more util methods
}
为什么我认为我重新声明Utils
尽管只是调用它并仅实例化一次?奇怪的是,我有另一个控制器,对于网站的另一部分,具有相同的模式,它没有抱怨。
最后,我尝试将require
指令移到控制器外部,并将其更改为require_once
以防万一真正调用它两次,并且在这两种情况下页面都会挂起,最终解决没有源代码发送到浏览器。
提前致谢。
答案 0 :(得分:2)
重命名
helpers / utils.php
到
助手/ utils.php中。
除了windows处理类名称以外的服务器应该与文件名匹配。
希望它对你有所帮助。
答案 1 :(得分:1)
使用$ this-&gt; load-&gt; helper()而不是require()
答案 2 :(得分:1)
你为什么不打电话:
$this->load->library('utils'); // needs to be stored in the libraries directory
而不是
require 'application/helpers/utils.php'; //<-- utils loaded
$this->utils = new Utils(); //<-- utils instantiated
答案 3 :(得分:1)
我不知道你为什么要把类从CI_Controller扩展到你的助手。辅助函数的助手(比如按键排序MySQL结果等)。也许你需要model
?
如果您需要帮助程序中的CodeIgniter功能,请使用get_instance()
代替$this
function prep_form() {
get_instance()->load->helper('form');
get_instance()->load->library('form_validation');
get_instance()->form_validation->set_error_delimiters('<li>', '</li>');
}
答案 4 :(得分:1)
尝试
require_once 'application/helpers/utils.php';
避免此错误。
答案 5 :(得分:0)
require 'application/helpers/utils.php'; //<-- utils loaded
这个可能被叫两次。您可以将Dashboard
实例化两次,也可以将该文件再次包含在其他位置。