我很长一段时间以来一直看到这种错误(错误信息如下),但我一直使用this "dirty" workaround。现在我不想再编辑核心CI代码了,我知道必须有一个优雅的解决方案。
这是设置。
在我的application / config / routes中我有这个
$route['default_controller'] = "dispatcher";
application / controllers /中的Dispatcher类定义如下:
class Dispatcher extends MY_Controller {
function __construct() {
parent::__construct();
$this->load->helper(array('form','https'));
}
function index() {
# load models
$this->load->model('site/map');
$this->load->model('site/langs');
$this->load->model('site/pages');
if ( $mapped = $this->map->get_map() ){ // this is the line 21
$this->langs->set_user_lang( $this->GLO['show_lang_in_url'], $this->GLO['show_lang_at_home'] );
$red = base_url().$this->GLO['user_lang_label']."/".$mapped;
redirect($red, "refresh");
}
...
现在MY_Controller位于application / core中,定义如下:
class MY_Controller extends CI_Controller {
public function __construct() {
parent::__construct();
$this->GLO = array();
#
# set defaults:
#
$this->GLO['deb'] = '';
$this->GLO['baseurl'] = base_url();
... (more GLO[key] = value )
}
public function __set ($key, $value ) {
$this->GLO[$key] = $value;
}
我使用的每个模型都是这样开始的(相应地命名):
class Map extends CI_Model {
function __construct(){
parent::__construct();
}
function get_map(){
.....
return true;
}
现在使用CI 2.1.2,PHP 5.3.3,Debian上的Apache 2在尝试加载页面时,我收到此错误:
遇到PHP错误严重性:通知消息:间接 修改重载属性Langs :: $ GLO无效 文件名:site / langs.php行号:82
遇到PHP错误严重性:通知消息:未定义 property:Dispatcher :: $ map文件名:controllers / dispatcher.php Line 数量:21
致命错误:在非对象中调用成员函数get_map() 第21行/home/webdev/MC/_WWW/application/controllers/dispatcher.php
第21行是地图模型中标记的第21行
if ( $mapped = $this->map->get_map() ){
另一个模型中的第82行如下所示:
$this->GLO['langs'][] = $temp;
在整个代码中,此GLO数组被引用为$ this-GLO [ key ]。必须不时读取和写入。如果我删除了MY_Controller中的__set函数,我会收到更多这些警告。
问题出在哪里?
提前多多感谢!
答案 0 :(得分:0)
我不确定第一个错误 - 但是这两个:
遇到PHP错误严重性:通知消息:未定义 property:Dispatcher :: $ map文件名:controllers / dispatcher.php Line 数量:21
致命错误:在非对象中调用成员函数get_map() 第21行/home/webdev/MC/_WWW/application/controllers/dispatcher.php
...看起来你还没有正确加载模型?
变化
if ( $mapped = $this->map->get_map() ){
到
$this->load->model('map');
if ( $mapped = $this->map->get_map() ){