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); ?>
  1. <?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') ?>
  1. <?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');
  1. App::import('Controller', 'MiController');

Cargar Modelos

App::import('Model', 'MiModelo');
  1. App::import('Model', 'MiModelo');

Loading Components

App::import('Component', 'Auth');
  1. App::import('Component', 'Auth');

Cargar Comportamientos

App::import('Behavior', 'Tree');
  1. App::import('Behavior', 'Tree');

Cargar Ayudantes

App::import('Helper', 'Html');
  1. 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');
  1. 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');
  1. App::import('Vendor', 'geshi');

Para cargar vendor/flickr/flickr.php

App::import('Vendor', 'flickr/flickr');
  1. App::import('Vendor', 'flickr/flickr');

Para cargar vendor/algun.nombre.php

App::import('Vendor', 'AlgunNombre', array('file' => 'algun.nombre.php'));
  1. 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'));
  1. 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');
  1. 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');
  1. 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');
  1. App::import('Vendor', 'geshi');

To load vendors/flickr/flickr.php

App::import('Vendor', 'flickr/flickr');
  1. App::import('Vendor', 'flickr/flickr');

To load vendors/some.name.php

App::import('Vendor', 'SomeName', array('file' => 'some.name.php'));
  1. 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'));
  1. App::import('Vendor', 'WellNamed', array('file' => 'services'.DS.'well.named.php'));