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"

// Se asume la siguiente configuración en application.ini
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 =>
  // APPLICATION_PATH/library/Foo/Bar/Test.php
  
class GLO_Name  =>
  // /global_dir/Glo/Name.php
 
class BarNon_Test
  // /global_dir/Barnon/Test.php
A partir de PHP 5.3 se pueden usar espacios de nombres:

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

class \Foo\Bar\Dummy =>
   // APPLICATION_PATH/library/Foo/Bar/Dummy.php

class \FooBar\Bar\Dummy =>
   // /global_dir/FooBar/Bar/Dummy.php

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 =>
// APPLICATION_PATH/controllers/

Model Classes =>
// APPLICATION_PATH/models/

Plugin Classes =>
// APPLICATION_PATH/plugins/
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 =>
    // ***Controller

Model Classes =>
    // ***Model

Plugin Classes =>
    // ***Plugin
algunos ejemplos:

Ejemplo #7 Ejemplo de carga MVC

class IndexController
    // APPLICATION_PATH/controllers/Index.php

class DataModel =>
   // APPLICATION_PATH/models/Data.php

class DummyPlugin =>
  // APPLICATION_PATH/plugins/Dummy.php

class A_B_TestModel =>
  // APPLICATION_PATH/models/A/B/Test.php

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

Yaf_Loader {
/* Propiedades */
protected $_local_ns ;
protected $_library ;
protected $_global_library ;
static $_instance ;
/* Métodos */
public autoload ( void ) : void
public clearLocalNamespace ( void ) : void
private __construct ( void )
public static getInstance ( void ) : void
public getLibraryPath ([ bool $is_global = FALSE ] ) : Yaf_Loader
public getLocalNamespace ( void ) : void
public getNamespacePath ( string $namespaces ) : string
public getNamespaces ( void ) : array
public static import ( void ) : void
public isLocalName ( void ) : void
public registerLocalNamespace ( mixed $prefix ) : void
public registerNamespace ( string|array $namespaces [, string $path ] ) : bool
public setLibraryPath ( 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