Autocarga de clases

Yii depende del mecanismo de autocarga de clases para localizar e incluir los archivos de las clases requiridas. Proporciona un cargador de clases de alto rendimiento que cumple con el estandard PSR-4. El cargador se instala cuando incluyes el archivo Yii.php.

Nota: Para simplificar la descripción, en esta sección sólo hablaremos de la carga automática de clases. Sin embargo, ten en cuenta que el contenido que describimos aquí también se aplica a la autocarga de interfaces y rasgos (Traits).

Usando el Autocargador de Yii

Para utilizar el cargador automático de clases de Yii, deberías seguir dos reglas básicas cuando desarrolles y nombres tus clases:

  • Cada clase debe estar bajo un espacio de nombre (namespace). Por ejemplo foo\bar\MyClass.
  • Cada clase debe estar guardada en un archivo individual cuya ruta está determinada por el siguiente algoritmo:
// $className es un nombre completo de clase con las iniciales barras invertidas.
$classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php');

Por ejemplo, si el nombre de una clase es foo\bar\MyClass, el alias la correspondiente ruta de archivo de la clase sería @foo/bar/MyClass.php. Para que este sea capaz de ser resuelto como una ruta de archivo, ya sea @foo o @foo/bar debe ser un alias de raíz (root alias).

Cuando utilizas la Plantilla de Aplicación Básica, puede que pongas tus clases bajo el nivel superior de espacio de nombres app para que de esta manera pueda ser automáticamente cargado por Yii sin tener la necesidad de definir un nuevo alias. Esto es porque @app es un alias predefinido, y el nombre de una clase tal como app\components\MyClass puede ser resuelto en el archivo de la clase AppBasePath/components/MyClass.php, de acuerdo con el algoritmo previamente descrito.

En la Plantilla de Aplicación Avanzada, cada nivel tiene su propio alias. Por ejemplo, el nivel front-end tiene un alias de raíz @frontend mientras que el nivel back-end tiene @backend. Como resultado, es posible poner las clases front-end bajo el espacio de nombres frontend mientras que las clases back-end pueden hacerlo bajo backend. Esto permitirá que estas clases sean automaticamente cargadas por el autocargador de Yii.

Mapa de Clases

El autocargador de clases de Yii soporta el mapa de clases, que mapea nombres de clases to sus correpondientes rutas de archvios. Cuando el autocargador esta cargando una clase, primero chequeará si la clase se encuentra en el mapa. Si es así, el correspondiente archivo será incluido directamente sin más comprobación. Esto hace que la clase se cargue muy rápidamente. De hecho, todas las clases de Yii son autocargadas de esta manera.

Puedes añadir una clase al mapa de clases Yii::$classMap de la siguiente forma,

Yii::$classMap['foo\bar\MyClass'] = 'path/to/MyClass.php';

Alias puede ser usado para especificar la ruta de archivos de clases. Deberías iniciar el mapeo de clases en el proceso bootstrapping de la aplicación para que de esta manera el mapa esté listo antes de que tus clases sean usadas.

Usando otros Autocargadores

Debido a que Yii incluye Composer como un gestor de dependencias y extensions, es recomendado que también instales el autocargador de Composer. Si estás usando alguna librería externa que requiere sus autocargadores, también deberías instalarlos.

Cuando se utiliza el cargador de clases automático de Yii conjuntamente con otros autocargadores, deberías incluir el archivo Yii.php después de que todos los demás autocargadores se hayan instalado. Esto hará que el autocargador de Yii sea el primero en responder a cualquier petición de carga automática de clases. Por ejemplo, el siguiente código ha sido extraido del script de entrada de la Plantilla de Aplicación Básica. La primera línea instala el autocargador de Composer, mientras que la segunda línea instala el autocargador de Yii.

require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

Puedes usar el autocargador de Composer sin el autocargador de Yii. Sin embargo, al hacerlo, la eficacia de la carga de tus clases puede que se degrade, y además deberías seguir las reglas establecidas por Composer para que tus clases pudieran ser autocargables.

Nota: Si no deseas utilizar el autocargador de Yii, tendrás que crear tu propia versión del archivo Yii.php e incluirlo en tu script de entrada.

Carga Automática de Clases de Extensiones

El autocargador de Yii es capaz de autocargar clases de extensiones. El único requirimiento es que la extensión especifique correctamente la sección de autoload (autocarga) en su archivo composer.json. Por favor, consulta la documentación de Composer para más detalles acerca de la especificación autoload.

En el caso de que no quieras usar el autocargador de Yii, el autocargador de Composer podría cargar las clases de extensiones por tí.