ltdev
ltdev

Reputation: 4467

CodeIgniter autoload specific classes

I have created two controllers, the Public_Controller and the Admin_Controller inside ./application/libraries folder, following Phil's Sturgeon example.

What I want to do is to autoload the Public_Controller and Admin_Controller specificly, so I created this autoload function inside ./application/config.php

function __autoload($class) {

    // Autoload only Public_Controller and Admin_Controller
    if (strpos($class, 'CI_') !== 0) {
        $file = APPPATH . 'libraries/'. $class .'.php';
        if ( file_exists($file) && is_file($file) ) {
            @include_once($file);
        }
    }
}

The problem with this I think is that I have more files included inside the libraries folder, so those too are autoloaded, which is not what I want. So instead I tried to do a small change to the first if statement, like this:

if ( in_array($class, array('Public_Controller, Admin_Controller')) ) // instead of strpos

in order to target only these two classes, but this does not seem to work. Any ideas what I might doing wrong?

Upvotes: 6

Views: 20027

Answers (5)

ltdev
ltdev

Reputation: 4467

I only wanted to auto load Public_Controller in the frontend and Admin_Controller in admin, so autoload.php is out. In autoload.php the files are loaded globally. The __autoload() function only tries to auto load a class when it's called, but not found.

Upvotes: 1

Ijas Ameenudeen
Ijas Ameenudeen

Reputation: 9259

You can use your method. __autoload() will NOT load other classes automatically. Because, according to the PHP doc,

__autoload() — Attempt to load undefined class. Your class files will be included "automatically" when you call (init) them without these functions: "include, include_once, require, require_once".

So no need to worry about that other classes will automatically.

OR

You can use the Codeigniter's in built autoload feature as

open the application/config/autoload.php file and add the item you want loaded to the autoload array. You'll find instructions in that file corresponding to each type of item. - Codeigniter Docs

Hope this helps :)

Upvotes: -1

Mohan
Mohan

Reputation: 4829

U dont need to write the autoload function ..codeiniter has an ibuilt dunction for autoloading specific files ...

go to applications/config/autoload.php ther u can add your specific file in the array

$autoload['libraries'] = array('database', 'session','your-specific_file');

Upvotes: -1

Albzi
Albzi

Reputation: 15609

Go to applications/config/autoload.php and in there you can edit what you need.

They are in arrays and seperated by packages, libraries, helpers, config, languages and models.

eg

$autoload['libraries'] = array('database', 'session');

$autoload['helper'] = array('url', 'html', 'form');

Upvotes: 6

Snehal S
Snehal S

Reputation: 875

there is no need to write autoload function codeigniter has its own file for auo loading files like libraries and helper

You can add class name there in the specific array

The file name should be "autoload.php" in application/config/ directory

Upvotes: 0

Related Questions