扩展CI_Controller /间接修改重载属性

时间:2012-09-13 15:16:59

标签: codeigniter continuous-integration php

CI社区似乎对此没有答案(或者它可能很明显,它看起来像一个菜鸟问题?),所以我在这里问。

我很长一段时间以来一直看到这种错误(错误信息如下),但我一直使用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函数,我会收到更多这些警告。

问题出在哪里?

提前多多感谢!

1 个答案:

答案 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() ){