3.4.4 La Clase App
Cargar clases adicionales se ha vuelto mucho más sencillo con CakePHP. En versiones anteriores existían funciones diferentes para cagar una clase dependiendo de su tipo. Estas funciones han sido reemplazadas, ahora toda la carga de clases debería hacerse a través de el método App::import(). Éste método te aegura que una clase ha sido cargada sólo una vez, que las clases que extiende se hayan cargado apropiadamente, y resuelve las rutas de ubicación automáticamente en la gran mayoría de los casos
Usando App::import()
<?php App::import($type, $name, $parent, $search, $file, $return); ?>
<?php App::import($type, $name, $parent, $search, $file, $return); ?>
A primera vista App::import luce complejo, sin embargo, en la mayoría de los casos sólo dos parámetros son suficientes.
Importando librerías del Core
Las librerías del Core, como Sanitize y Xml pueden ser cargadas de esta manera:
<?php App::import('Core', 'Sanitize') ?> <?php App::import('Core', 'Sanitize') ?>
Lo anterior hará que la clase Sanitize esté disponible para su uso
Importar Controladores, Modelos, Ayudantes, Comportamientos y Componentes
Todas las clases relacionadas con la aplicación pueden ser importadas con App::import(). Los siguientes ejemplos te mostrarán cómo:
Cargar Controladores
App::import('Controller', 'MiController'); App::import('Controller', 'MiController');
Cargar Modelos
App::import('Model', 'MiModelo'); App::import('Model', 'MiModelo');
Loading Components
App::import('Component', 'Auth'); App::import('Component', 'Auth');
Cargar Comportamientos
App::import('Behavior', 'Tree'); App::import('Behavior', 'Tree');
Cargar Ayudantes
App::import('Helper', 'Html'); App::import('Helper', 'Html');
Cargar Clases en Plugins
Cargar clases en plugins fuciona casi igual que cargar clases ubicadas en el Core o en la plicación principal, a excepción que debe especificar el nombre del plugin donde reside la clase a cargar
App::import('Model', 'MiPlugin.Comentario'); App::import('Model', 'MiPlugin.Comentario');
Cargar Achivos de Terceros
La función vendor() ha sido reemplazada. Los archivos de terceros deben ser cargados igualmente mediante App::import(). La sintaxis y los argumentos adicionales son levemente diferentes, debido a que los archivos de terceros y su estructura pueden variar inmensamente, y no todos los archivos de terceros contienen clases.
Los siguientes ejemplos ilustran cómo cargar archivos de terceros en diferentes rutas y estructuras. Los archivos de terceros deben estar ubicados en cualquiera de los directorios vendor
Ejemplos de Vendor
Para cargar vendor/geshi.php
App::import('Vendor', 'geshi'); App::import('Vendor', 'geshi');
Para cargar vendor/flickr/flickr.php
App::import('Vendor', 'flickr/flickr'); App::import('Vendor', 'flickr/flickr');
Para cargar vendor/algun.nombre.php
App::import('Vendor', 'AlgunNombre', array('file' => 'algun.nombre.php')); App::import('Vendor', 'AlgunNombre', array('file' => 'algun.nombre.php'));
Para cargar vendor/services/bien.nombrado.php
App::import('Vendor', 'BienNombrado', array('file' => 'services'.DS.'bien.nombrado.php')); App::import('Vendor', 'BienNombrado', array('file' => 'services'.DS.'bien.nombrado.php'));
3.4.4.1 Using App::import()
App::import($type, $name, $parent, $search, $file, $return);
At first glance App::import seems complex, however in most use cases only 2 arguments are required.
3.4.4.2 Importing Core Libs
Core libraries such as Sanitize, and Xml can be loaded by:
App::import('Core', 'Sanitize'); App::import('Core', 'Sanitize');
The above would make the Sanitize class available for use.
3.4.4.3 Importing Controllers, Models, Components, Behaviors, and Helpers
All application related class should also be loaded with App::import(). The following examples illustrate how to do so.
3.4.4.3.1 Loading Controllers
App::import('Controller', 'MyController');
3.4.4.3.2 Loading Models
App::import('Model', 'MyModel');
3.4.4.3.3 Loading Components
App::import('Component', 'Auth');
3.4.4.3.4 Loading Behaviors
App::import('Behavior', 'Tree');
3.4.4.3.5 Loading Helpers
App::import('Helper', 'Html');
3.4.4.4 Loading from Plugins
Loading classes in plugins works much the same as loading app and core classes except you must specify the plugin you are loading from.
App::import('Model', 'PluginName.Comment'); App::import('Model', 'PluginName.Comment');
3.4.4.5 Loading Vendor Files
The vendor() function has been deprecated. Vendor files should now be loaded through App::import() as well. The syntax and additional arguments are slightly different, as vendor file structures can differ greatly, and not all vendor files contain classes.
The following examples illustrate how to load vendor files from a number of path structures. These vendor files could be located in any of the vendor folders.
3.4.4.5.1 Vendor examples
To load vendors/geshi.php
App::import('Vendor', 'geshi'); App::import('Vendor', 'geshi');
To load vendors/flickr/flickr.php
App::import('Vendor', 'flickr/flickr'); App::import('Vendor', 'flickr/flickr');
To load vendors/some.name.php
App::import('Vendor', 'SomeName', array('file' => 'some.name.php')); App::import('Vendor', 'SomeName', array('file' => 'some.name.php'));
To load vendors/services/well.named.php
App::import('Vendor', 'WellNamed', array('file' => 'services'.DS.'well.named.php')); App::import('Vendor', 'WellNamed', array('file' => 'services'.DS.'well.named.php'));
