用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3175|回复: 3
收起左侧

[已解决] 请教:2个控制器之间继承后,如何在父控制器调用模型?

[复制链接]
发表于 2010-11-25 01:43:06 | 显示全部楼层 |阅读模式
本帖最后由 zhitianjiao 于 2010-11-25 02:24 编辑

大家好!


  为了oop重用的需要,我在app/libraries/ 下建立一个父类文件 test.php ,然后让app/controllers/ 目录下的控制器继承这个父类。

  其中,方法say() 被子类中访问没有任何问题;
  但是, play() 方法会去调用模型,调用模型action_model时会提示错误说“找不到对象”,请问有什么办法解决这个问题?

  

  test.php
  class Test extends Controller{

      public funtion Test(){
          parent::Controller();   
          //在构造函数中载入动作模型
          $this->load->model('Action_model');         
      }
      
       //测试 说话
       public funtion say(){
          //不调用任何模型
          echo 'im test';            
      }

       //测试  执行一个动作
       public funtion play(){
          //调用模型,出现问题的代码
          $this->Action_model->play();     

          //同理,以下代码也无法执行
          $this->load->database();
          $query = $this->db->query('SELECT name, title, email FROM my_table');


      }

  }


错误提示
Fatal error: Call to a member function play() on a non-object


  这个错误是由于无法正确加载模型造成的,我试过直接在里面调用数据库类也出错。
  大家都知道在 app/controllers/ 下的控制器 通过 $this->load->model('model_name');   是能够直接访问模型的。  






`
 楼主| 发表于 2010-11-25 02:29:09 | 显示全部楼层
本帖最后由 zhitianjiao 于 2010-11-25 02:33 编辑

占楼,希望有人回答。

require BASEPATH.'app/models/action_model.php';
之类的方法肯定是不行的,因为该model还会调用数据库操作对象。


`
发表于 2010-11-25 08:39:10 | 显示全部楼层
看代码没错,估计是控制器子类的构造函数没用parent::Test()
发表于 2010-11-25 12:32:34 | 显示全部楼层
建议楼主使用 MY_Controller,具体请参考手册。

本版积分规则