开发者

codeigniter -> having trouble loading multiple libraries/classes

开发者 https://www.devze.com 2023-01-31 06:08 出处:网络
Ok, so in my base controller (page.php) I have the following code which works fine: $this->load->library(\'Siteclass\');

Ok, so in my base controller (page.php) I have the following code which works fine:

   $this->load->library('Siteclass');
   $mysite = new site_model();

The siteclass library references a model named site_model and instantiates based on data received from that model. All is good.

Now I want to load another library so that I can instantiate another object as well. So I add this to page.php:

 $this->load->library('Memberclass');
 $mysite = new member_model();

But now I get the following error:

 Message: Undefined property: Memberclass::$site_model
 Filename: libraries/Loader.php
 Line Number: 1035

From what I can tell, it seems that the loader class, when being applied to the Memberclass, is somehow still referencing the site_model instead of the member_model. I've checked my code and I am definitely calling the correct files.

Here's w开发者_JAVA技巧hat Siteclass.php looks like:

 if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

 class Siteclass extends Controller {
    function __construct() {
        parent::Controller();
        $this->load->model('Site_model');
        $data = $this->Site_model->load_site_data();
        // etc etc

and here's what Memberclass.php looks like:

if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

class Memberclass extends Controller {
function __construct() {
        parent::Controller();
    $this->load->model('Member_model');
        $data = $this->Member_model->load_member_data();
        // etc etc

Thanks in advance for any help!

Gary


I think you're confused about how MVC works in CodeIgniter. Why are you using the loader class to create a controller? Why are you creating a stand-alone instance of your model outside of your controller class?

In CodeIgniter, your URLs represent paths to your controllers' methods. That means that your "base controller" should automatically be instantiated if you go to:

www.example.com/memberclass

Or perhaps more to the point, if you have a link like this:

www.example.com/page

You should have a file in your /application/controllers directory called page.php which looks like this:

if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 

class Page extends Controller {
    function __construct() {
        parent::Controller();
        // etc etc

Furthermore, unless you're loading data from your model to be used every single time you call this controller, you'll want to put your model calls inside a non-constructor method of this class. Something like:

class Page extends Controller {
    function __construct() {
        parent::Controller();
    }

    function index() {
        $this->load->model('Member_model');
        $data = $this->Member_model->load_member_data();
        $this->load->view('myview', array('data'=>$data));
    }
}

So again...not entirely sure what context you're doing this all in, but it seems like you're not standing firmly within the framework. There's basically no reason you should be using the loader class to load controllers, and furthermore there's no reason you should be creating stand-alone instances of model classes using PHP's new keyword.

0

精彩评论

暂无评论...
验证码 换一张
取 消