Skip to content

Autoloader

Introduction

Horizon's autoloading is more complicated than other frameworks due to its support for shared hosting, extensions, and remote updates. It has its own global autoloader, and can have multiple separate vendor directories.

Composer

Application vendors

Applications that use composer packages should have their own app/composer.json file. The framework automatically requires the app/vendor/autoload.php file if it exists.

Warning

Horizon has its own composer file at horizon/composer.json. However, this is an internal file that should never be modified. To add additional dependencies, you must initialize your own file at app/composer.json.

Extension vendors

Extensions should have their own composer installations and vendor directories. Note that these vendor autoloaders are not automatically required. Instead, extensions can import the autoloader file via the files configuration option. For example:

'files' => array(
    'vendor/autoload.php'
)

For more information on extensions and their configuration, refer to the extensions documentation.

Namespaces

The config/namespaces.php file specifies namespaces which will be "mounted" during startup. This file can be used to easily create new namespaces pointing to different source directories. The App namespace is registered through this file by default as well.

config/namespaces.php
return array(
    'map' => array(
        'App\\' => '/app/src'
    )
);

Manual mounting

To mount a namespace programatically, you can use the static Autoloader service. This is a foundation facade and its interface will not change in minor updates. You can mount namespaces at any point in the application's execution – the mapping will take effect immediately.

use Horizon\Foundation\Services\Autoloader;

Autoloader::mount('App\\', '/absolute/path/to/src');