Composer Autoload mit Code Igniter

Veröffentlicht am 27.07.2014

Möchte man Composer in einem Code Igniter (CI) Projekt verwenden muss lediglich die "index.php" folgendermaßen erweitert werden:

// Composer
include_once './vendor/autoload.php';

require_once BASEPATH.'core/CodeIgniter.php';

Falls in dem bestehenden Code Igniter bereits eine __autoload Funktion definiert wurde kollidiert diese mit dem Autoload von Composer und entsprechende Klassen werden nicht gefunden. Üblicherweise werden eigene Autoload Funktionen in eine der Config Dateien von CI definiert beispielsweise in der "config.php":

function __autoload($class)
{
	if (strpos($class, 'CI_') !== 0)
	{
		if (file_exists($file = APPPATH . 'core/' . strtolower($class) . EXT))
		{
			include $file;
		}
		else if (file_exists($file = APPPATH . 'orm/' . strtolower($class) . EXT))
		{
			include $file;
		}
	}
}

Das geschilderte Problem kann mit Hilfe der Funktion "spl_autoload_register" behoben werden. Dazu kann die alte Autoload Funktion einfach umbenannt und unter einem beliebigen Namen als Autoload Funktion registriert werden:

function customCIAutoload($class)
{
    if (strpos($class, 'CI_') !== 0)
    {
        if (file_exists($file = APPPATH . 'core/' . strtolower($class) . EXT))
        {
            include $file;
        }
        else if (file_exists($file = APPPATH . 'orm/' . strtolower($class) . EXT))
        {
            include $file;
        }
    }
}

spl_autoload_register('customCIAutoload');