La clase Yaf_Loader

(Yaf >=1.0.0)

Introducción

Yaf_Loader introduce una solución completa de autocarga para Yaf.

La primera vez que se recupera una instancia de la clase Yaf_Application, Yaf_Loader instanciará un singleton, y se registrará a sí mismo con spl_autoload. Se recupera una instancia usando el método Yaf_Loader::getInstance()

Yaf_Loader intenta cargar una clase sólo una vez, y si falla, dependiendo de yaf.use_spl_auload, si esta configuración es "On" Yaf_Loader::autoload() devolverá false, y así dará otra oportunidad a otra función de autocarga; si es "Off" (por omisión), Yaf_Loader::autoload() devolverá true, y lo que es más importante: emitirá una advertencia muy útil (muy útil para averiguar por qué no se cargó una clase).

Nota:

Por favor, mantenga yaf.use_spl_autoload en "Off" a menos que exista una biblioteca que tenga su propio mecanismo de autocarga y sea imposible reescribirlo.

Por defecto, Yaf_Loader asume que todas las bibliotecas (las clases definidas en el script) se almacenan en el directorio de clases global, el cual está definido en php.ini (yaf.library).

Si quiere que Yaf_Loader busque algunas clases (bibliotecas) en el directorio de clases local (el cual está definido en application.ini, y por omisión es application.directory . "/libraray"), debería registrar el prefijo de clases usando el método Yaf_Loader::registerLocalNameSpace()

Veamos algunos ejemplos (asumiendo que APPLICATION_PATH es application.directory):

Ejemplo #1 Ejemplo de configuración

// Se asume la siguiente configuración en php.ini: yaf.library = "/global_dir"application.library = APPLICATION_PATH "/library"
Se asume que el siguiente espacio de nombres local está registrado:

Ejemplo #2 Registrar el espacio de nombres local

<?php
class Bootstrap extends Yaf_Bootstrap_Abstract{
public function
_initLoader($dispatcher) {
Yaf_Loader::getInstance()->registerLocalNameSpace(array("Foo", "Bar"));
}
?>
Ahora los ejemplos de autocarga:

Ejemplo #3 Load class example

class Foo_Bar_Test => class GLO_Name => class BarNon_Test

Ejemplo #4 Ejemplo de carga de una clase en el espacio de nombres

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

Se puede observar que todas las carpetas tienen la primera letra en mayúsculas, se pueden ponerlas en minúsculas estableciendo yaf.lowcase_path = On en php.ini

Yaf_Loader también está diseñada para cargar las clases MVC, y la regla es:

Ejemplo #5 Ejemplo de carga de clase MVC

Controller Classes => Model Classes => Plugin Classes =>
Yaf identifica un sufijo de clases (por omisión, se puede cambiar el sufijo cambiando la opción de configuración yaf.name_suffix) para decidir si es una clase MVC:

Ejemplo #6 Distinciones de clases MVC

Controller Classes => Model Classes => Plugin Classes =>
algunos ejemplos:

Ejemplo #7 Ejemplo de carga MVC

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

Nota:

A partir de 2.1.18, Yaf admite que los Controllers se autocarguen para el lado del scrpt cliente, (lo que significa que la autocarga se desencadena por el script del usuario de php, p.ej., acceder a una propiedad de un Controller estático en Bootstrap o Plugins), aunque el autocargador solamente intenta localizar el controlador bajo la carpeta del módulo predeterminado, que es "APPLICATION_PATH/controllers/".

también, el directorio será afectado por yaf.lowcase_path.

Sinopsis de la Clase

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
}

Propiedades

_local_ns

_library

Por omisión, este valor es application.directory . "/library", se puede cambiar en application.ini (application.library) o llamando al método Yaf_Loader::setLibraryPath()

_global_library

_instance

Tabla de contenidos

To Top