The Yaf_Loader class

(Yaf >=1.0.0)

Introduction

Yaf_Loader introduces a comprehensive autoloading solution for Yaf.

The first time an instance of Yaf_Application is retrieved, Yaf_Loader will instance a singleton, and registers itself with spl_autoload. You retrieve an instance using the Yaf_Loader::getInstance()

Yaf_Loader attempt to load a class only one shot, if failed, depend on yaf.use_spl_auload, if this config is On Yaf_Loader::autoload() will return false, thus give the chance to other autoload function. if it is Off (by default), Yaf_Loader::autoload() will return true, and more important is that a very useful warning will be triggered (very useful to find out why a class could not be loaded).

Note:

Please keep yaf.use_spl_autoload Off unless there is some library have their own autoload mechanism and impossible to rewrite it.

By default, Yaf_Loader assume all library (class defined script) store in the global library directory, which is defined in the php.ini(yaf.library).

If you want Yaf_Loader search some classes(libraries) in the local class directory(which is defined in application.ini, and by default, it is application.directory . "/library"), you should register the class prefix using the Yaf_Loader::registerLocalNameSpace()

Let's see some examples(assuming APPLICATION_PATH is application.directory):

Example #1 Config example

// Assuming the following configure in php.ini: yaf.library = "/global_dir"application.library = APPLICATION_PATH "/library"
Assuming the following local name space is registered:

Example #2 Register localnamespace

<?php
class Bootstrap extends Yaf_Bootstrap_Abstract{
public function
_initLoader($dispatcher) {
Yaf_Loader::getInstance()->registerLocalNameSpace(array("Foo", "Bar"));
}
?>
Then the autoload examples:

Example #3 Load class example

class Foo_Bar_Test => class GLO_Name => class BarNon_Test

Example #4 Load namespace class example

class \Foo\Bar\Dummy => class \FooBar\Bar\Dummy =>

You may noticed that all the folder with the first letter capitalized, you can make them lowercase by set yaf.lowcase_path = On in php.ini

Yaf_Loader is also designed to load the MVC classes, and the rule is:

Example #5 MVC class loading example

Controller Classes => Model Classes => Plugin Classes =>
Yaf identify a class's suffix(this is by default, you can also change to the prefix by change the configure yaf.name_suffix) to decide whether it is a MVC class:

Example #6 MVC class distinctions

Controller Classes => Model Classes => Plugin Classes =>
some examples:

Example #7 MVC loading example

class IndexController class DataModel => class DummyPlugin => class A_B_TestModel =>

Note:

As of 2.1.18, Yaf supports Controllers autoloading for user script side, (which means the autoloading triggered by user php script, eg: access a controller static property in Bootstrap or Plugins), but autoloader only try to locate controller class script under the default module folder, which is "APPLICATION_PATH/controllers/".

also, the directory will be affected by yaf.lowcase_path.

Class synopsis

classYaf_Loader {
protected$_local_ns;
protected$_library;
static$_instance;
private__construct()
publicautoload(): void
publicstaticgetInstance(): void
publicgetLibraryPath(bool$is_global = false): Yaf_Loader
publicgetNamespacePath(string$namespaces): string
publicgetNamespaces(): array
publicstaticimport(): void
publicisLocalName(): void
publicregisterNamespace(string|array$namespaces, string$path = ?): bool
publicsetLibraryPath(string$directory, bool$is_global = false): Yaf_Loader
}

Properties

_local_ns

_library

By default, this value is application.directory . "/library", you can change this either in the application.ini(application.library) or call to Yaf_Loader::setLibraryPath()

_global_library

_instance

Table of Contents

To Top