mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 06:37:55 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			592 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			592 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
Aplicaciones
 | 
						|
============
 | 
						|
 | 
						|
Las `Applications` (aplicaciones) son objetos que gobiernan la estructura total y el ciclo de vida de las aplicaciones
 | 
						|
hechas en Yii.
 | 
						|
Cada aplicación Yii contiene un objeto `Application` que es creado en el [script de entrada](structure-entry-scripts.md)
 | 
						|
y es globalmente accesible a través de la expresión `\Yii::$app`.
 | 
						|
 | 
						|
> Info: Dependiendo del contexto, cuando decimos "una aplicación", puede significar tanto un objeto Application
 | 
						|
  o un sistema desarrollado en Yii.
 | 
						|
 | 
						|
Hay dos tipos de aplicaciones: [[yii\web\Application|aplicaciones Web]] y
 | 
						|
[[yii\console\Application|aplicaciones de consola]]. Como el nombre lo indica, la primera maneja principalmente
 | 
						|
Web requests mientras que la última maneja requests (peticiones) de la línea de comandos.
 | 
						|
 | 
						|
 | 
						|
## Configuraciones de las Aplicaciones <span id="application-configurations"></span>
 | 
						|
 | 
						|
Cuando un [script de entrada](structure-entry-scripts.md) crea una aplicación, cargará
 | 
						|
una [configuración](concept-configurations.md) y la aplicará a la aplicación, como se muestra a continuación:
 | 
						|
 | 
						|
```php
 | 
						|
require __DIR__ . '/../vendor/autoload.php';
 | 
						|
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
 | 
						|
 | 
						|
// carga la configuración de la aplicación
 | 
						|
$config = require __DIR__ . '/../config/web.php';
 | 
						|
 | 
						|
// instancia y configura la aplicación
 | 
						|
(new yii\web\Application($config))->run();
 | 
						|
```
 | 
						|
 | 
						|
Principalmente, las [configuraciones](concept-configurations.md) de una aplicación especifican
 | 
						|
como inicializar las propiedades de un objeto `application`. Debido a que estas configuraciones
 | 
						|
suelen ser complejas, son usualmente guardadas en [archivos de configuración](concept-configurations.md#configuration-files),
 | 
						|
como en el archivo `web.php` del ejemplo anterior.
 | 
						|
 | 
						|
 | 
						|
## Propiedades de la Aplicación <span id="application-properties"></span>
 | 
						|
 | 
						|
Hay muchas propiedades importantes en la aplicación que deberían configurarse en en la configuración de la aplicación.
 | 
						|
Estas propiedades suelen describir el entorno en el cual la aplicación está corriendo.
 | 
						|
Por ejemplo, las aplicaciones necesitan saber cómo cargar [controladores](structure-controllers.md),
 | 
						|
dónde guardar archivos temporales, etc. A continuación, resumiremos esas propiedades.
 | 
						|
 | 
						|
 | 
						|
### Propiedades Requeridas <span id="required-properties"></span>
 | 
						|
 | 
						|
En cualquier aplicación, debes configurar al menos dos propiedades: [[yii\base\Application::id|id]]
 | 
						|
y [[yii\base\Application::basePath|basePath]].
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::id|id]] <span id="id"></span>
 | 
						|
 | 
						|
La propiedad [[yii\base\Application::id|id]] especifica un ID único que diferencia una aplicación de otras.
 | 
						|
Es mayormente utilizada a nivel programación. A pesar de que no es un requerimiento, para una mejor interoperabilidad,
 | 
						|
se recomienda utilizar sólo caracteres alfanuméricos.
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::basePath|basePath]] <span id="basePath"></span>
 | 
						|
 | 
						|
La propiedad [[yii\base\Application::basePath|basePath]] especifica el directorio raíz de una aplicación.
 | 
						|
Es el directorio que alberga todos los archivos protegidos de un sistema. Bajo este directorio,
 | 
						|
tendrás normalmente sub-directorios como `models`, `views`, `controllers`, que contienen el código fuente
 | 
						|
correspondiente al patrón MVC.
 | 
						|
 | 
						|
Puedes configurar la propiedad [[yii\base\Application::basePath|basePath]] usando la ruta a un directorio
 | 
						|
o un [alias](concept-aliases.md). En ambas formas, el directorio debe existir, o se lanzará una excepción.
 | 
						|
La ruta será normalizada utilizando la función `realpath()`.
 | 
						|
 | 
						|
La propiedad [[yii\base\Application::basePath|basePath]] es utilizada a menudo derivando otras rutas
 | 
						|
(ej. la ruta `runtime`). Por esta razón, un alias llamado `@app` está predefinido para representar esta ruta.
 | 
						|
Rutas derivadas pueden ser entonces creadas a partir de este alias (ej. `@app/runtime` para referirse al directorio `runtime`).
 | 
						|
 | 
						|
 | 
						|
### Propiedades Importantes <span id="important-properties"></span>
 | 
						|
 | 
						|
Las propiedades descritas en esta subsección a menudo necesita ser configurada porque difieren entre las
 | 
						|
diferentes aplicaciones.
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::aliases|aliases]] <span id="aliases"></span>
 | 
						|
 | 
						|
Esta propiedad te permite definir un grupo de [alias](concept-aliases.md) en términos de un array (matriz).
 | 
						|
Las claves del array son los nombres de los alias, y los valores su correspondiente definición.
 | 
						|
Por ejemplo:
 | 
						|
 | 
						|
```php
 | 
						|
[
 | 
						|
    'aliases' => [
 | 
						|
        '@name1' => 'path/to/path1',
 | 
						|
        '@name2' => 'path/to/path2',
 | 
						|
    ],
 | 
						|
]
 | 
						|
```
 | 
						|
 | 
						|
Esta propiedad está provista de tal manera que puedas definir alias en términos de configuraciones de la aplicación
 | 
						|
en vez de llamadas al método [[Yii::setAlias()]].
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::bootstrap|bootstrap]] <span id="bootstrap"></span>
 | 
						|
 | 
						|
Esta es una propiedad importante. Te permite definir un array de los componentes que deben ejecutarse
 | 
						|
durante el [[yii\base\Application::bootstrap()|proceso de `bootstrapping`]] de la aplicación.
 | 
						|
Por ejemplo, si quieres personalizar las [reglas de URL](runtime-url-handling.md) de un [módulo](structure-modules.md),
 | 
						|
podrías listar su ID como un elemento de este array.
 | 
						|
 | 
						|
Cada componente listado en esta propiedad puede ser especificado en cualquiera de los siguientes formatos:
 | 
						|
 | 
						|
- el ID de un componente como está especificado vía [`components`](#components).
 | 
						|
- el ID de un módulo como está especificado vía [`modules`](#modules).
 | 
						|
- un nombre de clase.
 | 
						|
- un array de configuración.
 | 
						|
 | 
						|
Por ejemplo:
 | 
						|
 | 
						|
```php
 | 
						|
[
 | 
						|
    'bootstrap' => [
 | 
						|
        // un ID de componente o de módulo
 | 
						|
        'demo',
 | 
						|
 | 
						|
        // un nombre de clase
 | 
						|
        'app\components\TrafficMonitor',
 | 
						|
 | 
						|
        // un array de configuración
 | 
						|
        [
 | 
						|
            'class' => 'app\components\Profiler',
 | 
						|
            'level' => 3,
 | 
						|
        ]
 | 
						|
    ],
 | 
						|
]
 | 
						|
```
 | 
						|
 | 
						|
Durante el proceso de `bootstrapping`, cada componente será instanciado. Si la clase del componente
 | 
						|
implementa [[yii\base\BootstrapInterface]], también se llamará a su método [[yii\base\BootstrapInterface::bootstrap()|bootstrap()]].
 | 
						|
 | 
						|
Otro ejemplo práctico se encuentra en la configuración del [Template de Aplicación Básica](start-installation.md),
 | 
						|
donde los módulos `debug` y `gii` son configurados como componentes `bootstrap` cuando la aplicación está
 | 
						|
corriendo en un entorno de desarrollo,
 | 
						|
 | 
						|
```php
 | 
						|
if (YII_ENV_DEV) {
 | 
						|
    // ajustes en la configuración del entorno 'dev' (desarrollo)
 | 
						|
    $config['bootstrap'][] = 'debug';
 | 
						|
    $config['modules']['debug'] = 'yii\debug\Module';
 | 
						|
 | 
						|
    $config['bootstrap'][] = 'gii';
 | 
						|
    $config['modules']['gii'] = 'yii\gii\Module';
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
> Note: Agregar demasiados componentes `bootstrap` degradará la performance de tu aplicación debido a que
 | 
						|
  por cada request, se necesita correr el mismo grupo de componentes. Por lo tanto, utiliza componentes `bootstrap` con criterio.
 | 
						|
 | 
						|
 | 
						|
#### [[yii\web\Application::catchAll|catchAll]] <span id="catchAll"></span>
 | 
						|
 | 
						|
Esta propiedad está solamente soportada por [[yii\web\Application|aplicaciones Web]]. Especifica
 | 
						|
la [acción de controlador](structure-controllers.md) que debería manejar todos los requests (peticiones) del usuario.
 | 
						|
Es mayormente utilizada cuando una aplicación está en "modo de mantenimiento" y necesita que todas las peticiones
 | 
						|
sean capturadas por una sola acción.
 | 
						|
 | 
						|
La configuración es un array cuyo primer elemento especifica la ruta de la acción.
 | 
						|
El resto de los elementos del array (pares clave-valor) especifica los parámetros a ser enviados a la acción.
 | 
						|
Por ejemplo:
 | 
						|
 | 
						|
```php
 | 
						|
[
 | 
						|
    'catchAll' => [
 | 
						|
        'offline/notice',
 | 
						|
        'param1' => 'value1',
 | 
						|
        'param2' => 'value2',
 | 
						|
    ],
 | 
						|
]
 | 
						|
```
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::components|components]] <span id="components"></span>
 | 
						|
 | 
						|
Esta es la propiedad más importante. Te permite registrar una lista de componentes llamados [componentes de aplicación](#structure-application-components.md)
 | 
						|
que puedes utilizar en otras partes de tu aplicación. Por ejemplo:
 | 
						|
 | 
						|
```php
 | 
						|
[
 | 
						|
    'components' => [
 | 
						|
        'cache' => [
 | 
						|
            'class' => 'yii\caching\FileCache',
 | 
						|
        ],
 | 
						|
        'user' => [
 | 
						|
            'identityClass' => 'app\models\User',
 | 
						|
            'enableAutoLogin' => true,
 | 
						|
        ],
 | 
						|
    ],
 | 
						|
]
 | 
						|
```
 | 
						|
 | 
						|
Cada componente de la aplicación es un par clave-valor del array. La clave representa el ID del componente,
 | 
						|
mientras que el valor representa el nombre de la clase del componente o una [configuración](concept-configurations.md).
 | 
						|
 | 
						|
Puedes registrar cualquier componente en una aplicación, y el componente puede ser globalmente accedido utilizando
 | 
						|
la expresión `\Yii::$app->ComponentID`.
 | 
						|
 | 
						|
Por favor, lee la sección [Componentes de la Aplicación](structure-application-components.md) para mayor detalle.
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::controllerMap|controllerMap]] <span id="controllerMap"></span>
 | 
						|
 | 
						|
Esta propiedad te permite mapear un ID de controlador a una clase de controlador arbitraria. Por defecto, Yii mapea
 | 
						|
ID de controladores a clases de controladores basado en una [convención](#controllerNamespace) (ej. el ID `post` será mapeado
 | 
						|
a `app\controllers\PostController`). Configurando esta propiedad, puedes saltear esa convención
 | 
						|
para controladores específicos. En el siguiente ejemplo, `account` será mapeado a
 | 
						|
`app\controllers\UserController`, mientras que `article` será mapeado a `app\controllers\PostController`.
 | 
						|
 | 
						|
```php
 | 
						|
[
 | 
						|
    'controllerMap' => [
 | 
						|
        'account' => 'app\controllers\UserController',
 | 
						|
        'article' => [
 | 
						|
            'class' => 'app\controllers\PostController',
 | 
						|
            'enableCsrfValidation' => false,
 | 
						|
        ],
 | 
						|
    ],
 | 
						|
]
 | 
						|
```
 | 
						|
 | 
						|
Las claves de este array representan los ID de los controladores, mientras que los valores representan
 | 
						|
los nombres de clase de dichos controladores o una [configuración](concept-configurations.md).
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::controllerNamespace|controllerNamespace]] <span id="controllerNamespace"></span>
 | 
						|
 | 
						|
Esta propiedad especifica el `namespace` bajo el cual las clases de los controladores deben ser ubicados. Por defecto es
 | 
						|
`app\controllers`. Si el ID es `post`, por convención el controlador correspondiente (sin
 | 
						|
`namespace`) será `PostController`, y el nombre completo (cualificado) de la clase `app\controllers\PostController`.
 | 
						|
 | 
						|
Las clases de controladores pueden ser ubicados también en sub-directorios del directorio correspondiente a este `namespace`.
 | 
						|
Por ejemplo, dado el ID de controlador `admin/post`, el nombre completo de la clase sería `app\controllers\admin\PostController`.
 | 
						|
 | 
						|
Es importante que el nombre completo de la clase del controlador sea [auto-cargable](concept-autoloading.md)
 | 
						|
y el `namespace` actual de la clase coincida con este valor. De otro modo, recibirás
 | 
						|
un error "Page Not Found" ("Página no Encontrada") cuando accedas a la aplicación.
 | 
						|
 | 
						|
En caso de que quieras romper con la convención cómo se comenta arriba, puedes configurar la propiedad [controllerMap](#controllerMap).
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::language|language]] <span id="language"></span>
 | 
						|
 | 
						|
Esta propiedad especifica el idioma en el cual la aplicación debería mostrar el contenido a los usuarios.
 | 
						|
El valor por defecto de esta propiedad es `en`, referido a English. Deberías configurar esta propiedad
 | 
						|
si tu aplicación necesita soporte multi-idioma.
 | 
						|
 | 
						|
El valor de esta propiedad determina varios aspectos de la [internacionalización](tutorial-i18n.md),
 | 
						|
incluido la traducción de mensajes, formato de fecha y números, etc. Por ejemplo, el widget [[yii\jui\DatePicker]]
 | 
						|
utilizará el valor de esta propiedad para determinar en qué idioma el calendario debe ser mostrado y cómo dar formato
 | 
						|
a la fecha.
 | 
						|
 | 
						|
Se recomienda que especifiques el idioma en términos de una [Código de idioma IETF](https://es.wikipedia.org/wiki/Código_de_idioma_IETF).
 | 
						|
Por ejemplo, `en` se refiere a English, mientras que `en-US` se refiere a English (United States).
 | 
						|
 | 
						|
Se pueden encontrar más detalles de este aspecto en la sección [Internacionalización](tutorial-i18n.md).
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::modules|modules]] <span id="modules"></span>
 | 
						|
 | 
						|
Esta propiedad especifica los [módulos](structure-modules.md) que contiene la aplicación.
 | 
						|
 | 
						|
Esta propiedad toma un array con los nombre de clases de los módulos o [configuraciones](concept-configurations.md) con las claves siendo
 | 
						|
los IDs de los módulos. Por ejemplo:
 | 
						|
 | 
						|
```php
 | 
						|
[
 | 
						|
    'modules' => [
 | 
						|
        // módulo "booking" especificado con la clase del módulo
 | 
						|
        'booking' => 'app\modules\booking\BookingModule',
 | 
						|
 | 
						|
        // módulo "comment" especificado usando un array de configuración
 | 
						|
        'comment' => [
 | 
						|
            'class' => 'app\modules\comment\CommentModule',
 | 
						|
            'db' => 'db',
 | 
						|
        ],
 | 
						|
    ],
 | 
						|
]
 | 
						|
```
 | 
						|
 | 
						|
Por favor consulta la sección [Módulos](structure-modules.md) para más detalles.
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::name|name]] <span id="name"></span>
 | 
						|
 | 
						|
Esta propiedad especifica el nombre de la aplicación que será mostrado a los usuarios. Al contrario de
 | 
						|
[[yii\base\Application::id|id]], que debe tomar un valor único, el valor de esta propiedad existe principalmente
 | 
						|
para propósito de visualización y no tiene porqué ser única.
 | 
						|
 | 
						|
No siempre necesitas configurar esta propiedad si en tu aplicación no va a ser utilizada.
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::params|params]] <span id="params"></span>
 | 
						|
 | 
						|
Esta propiedad especifica un array con parámetros accesibles desde cualquier lugar de tu aplicación.
 | 
						|
En vez de usar números y cadenas fijas por todos lados en tu código, es una buena práctica definirlos como
 | 
						|
parámetros de la aplicación en un solo lugar y luego utilizarlos donde los necesites. Por ejemplo, podrías definir el tamaño
 | 
						|
de las imágenes en miniatura de la siguiente manera:
 | 
						|
 | 
						|
```php
 | 
						|
[
 | 
						|
    'params' => [
 | 
						|
        'thumbnail.size' => [128, 128],
 | 
						|
    ],
 | 
						|
]
 | 
						|
```
 | 
						|
 | 
						|
Entonces, cuando necesites acceder a esa configuración en tu aplicación, podrías hacerlo utilizando el código siguiente:
 | 
						|
 | 
						|
```php
 | 
						|
$size = \Yii::$app->params['thumbnail.size'];
 | 
						|
$width = \Yii::$app->params['thumbnail.size'][0];
 | 
						|
```
 | 
						|
 | 
						|
Más adelante, si decides cambiar el tamaño de las miniaturas, sólo necesitas modificarlo en la configuración de la aplicación
 | 
						|
sin necesidad de tocar el código que lo utiliza.
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::sourceLanguage|sourceLanguage]] <span id="sourceLanguage"></span>
 | 
						|
 | 
						|
Esta propiedad especifica el idioma en el cual la aplicación está escrita. El valor por defecto es `'en-US'`,
 | 
						|
referido a English (United States). Deberías configurar esta propiedad si el contenido de texto en tu código no está en inglés.
 | 
						|
 | 
						|
Como la propiedad [language](#language), deberías configurar esta propiedad siguiendo el [Código de idioma IETF](https://es.wikipedia.org/wiki/Código_de_idioma_IETF).
 | 
						|
Por ejemplo, `en` se refiere a English, mientras que `en-US` se refiere a English (United States).
 | 
						|
 | 
						|
Puedes encontrar más detalles de esta propiedad en la sección [Internacionalización](tutorial-i18n.md).
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::timeZone|timeZone]] <span id="timeZone"></span>
 | 
						|
 | 
						|
Esta propiedad es provista como una forma alternativa de definir el `time zone` de PHP por defecto en tiempo de ejecución.
 | 
						|
Configurando esta propiedad, escencialmente estás llamando a la función de PHP [date_default_timezone_set()](https://www.php.net/manual/es/function.date-default-timezone-set.php).
 | 
						|
Por ejemplo:
 | 
						|
 | 
						|
```php
 | 
						|
[
 | 
						|
    'timeZone' => 'America/Los_Angeles',
 | 
						|
]
 | 
						|
```
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::version|version]] <span id="version"></span>
 | 
						|
 | 
						|
Esta propiedad especifica la versión de la aplicación. Es por defecto `'1.0'`. No hay total necesidad de configurarla
 | 
						|
si tu no la usarás en tu código.
 | 
						|
 | 
						|
 | 
						|
### Propiedades Útiles <span id="useful-properties"></span>
 | 
						|
 | 
						|
Las propiedades especificadas en esta sub-sección no son configuradas normalmente ya que sus valores por defecto
 | 
						|
estipulan convenciones comunes. De cualquier modo, aún puedes configurarlas en caso de que quieras romper con la convención.
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::charset|charset]] <span id="charset"></span>
 | 
						|
 | 
						|
Esta propiedad especifica el `charset` que la aplicación utiliza. El valor por defecto es `'UTF-8'`, que debería ser mantenido
 | 
						|
tal cual para la mayoría de las aplicaciones a menos que estés trabajando con sistemas legados que utilizan muchos datos no-unicode.
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::defaultRoute|defaultRoute]] <span id="defaultRoute"></span>
 | 
						|
 | 
						|
Esta propiedad especifica la [ruta](runtime-routing.md) que una aplicación debería utilizar si el `request`
 | 
						|
no especifica una. La ruta puede consistir el ID de un sub-módulo, el ID de un controlador, y/o el ID de una acción.
 | 
						|
Por ejemplo, `help`, `post/create`, `admin/post/create`. Si el ID de la acción no se especifica, tomará el valor por defecto
 | 
						|
especificado en [[yii\base\Controller::defaultAction]].
 | 
						|
 | 
						|
Para [[yii\web\Application|aplicaciones Web]], el valor por defecto de esta propiedad es `'site'`, lo que significa que el
 | 
						|
controlador `SiteController` y su acción por defecto serán usados. Como resultado, si accedes a la aplicación sin
 | 
						|
especificar una ruta, mostrará el resultado de `app\controllers\SiteController::actionIndex()`.
 | 
						|
 | 
						|
Para [[yii\console\Application|aplicaciones de consola]], el valor por defecto es `'help'`, lo que significa que el comando
 | 
						|
[[yii\console\controllers\HelpController::actionIndex()]] debería ser utilizado. Como resultado, si corres el comando `yii`
 | 
						|
sin proveer ningún argumento, mostrará la información de ayuda.
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::extensions|extensions]] <span id="extensions"></span>
 | 
						|
 | 
						|
Esta propiedad especifica la lista de [extensiones](structure-extensions.md) que se encuentran instaladas y son utilizadas
 | 
						|
por la aplicación.
 | 
						|
Por defecto, tomará el array devuelto por el archivo `@vendor/yiisoft/extensions.php`. El archivo `extensions.php`
 | 
						|
es generado y mantenido automáticamente cuando utilizas [Composer](https://getcomposer.org) para instalar extensiones.
 | 
						|
Por lo tanto, en la mayoría de los casos no necesitas configurarla.
 | 
						|
 | 
						|
En el caso especial de que quieras mantener las extensiones a mano, puedes configurar la propiedad como se muestra a continuación:
 | 
						|
 | 
						|
```php
 | 
						|
[
 | 
						|
    'extensions' => [
 | 
						|
        [
 | 
						|
            'name' => 'nombre de la extensión',
 | 
						|
            'version' => 'número de versión',
 | 
						|
            'bootstrap' => 'BootstrapClassName',  // opcional, puede ser también un array de configuración
 | 
						|
            'alias' => [  // opcional
 | 
						|
                '@alias1' => 'to/path1',
 | 
						|
                '@alias2' => 'to/path2',
 | 
						|
            ],
 | 
						|
        ],
 | 
						|
 | 
						|
        // ... más extensiones como las de arriba ...
 | 
						|
 | 
						|
    ],
 | 
						|
]
 | 
						|
```
 | 
						|
 | 
						|
Como puedes ver, la propiedad toma un array de especificaciones de extensiones. Cada extensión es especificada mediante un array
 | 
						|
que consiste en los elementos `name` y `version`. Si una extensión necesita ser ejecutada durante el proceso de [`bootstrap`](runtime-bootstrapping.md),
 | 
						|
un elemento `bootstrap` puede ser especificado con un nombre de clase o un array de [configuración](concept-configurations.md).
 | 
						|
Una extensión también puede definir algunos [alias](concept-aliases.md).
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::layout|layout]] <span id="layout"></span>
 | 
						|
 | 
						|
Esta propiedad especifica el valor del `layout` por defecto que será utilizado al renderizar una [vista](structure-views.md).
 | 
						|
El valor por defecto es `'main'`, y se refiere al archivo `main.php` bajo el [`layout path`](#layoutPath) definido.
 | 
						|
Si tanto el [`layout path`](#layoutPath) y el [`view path`](#viewPath) están utilizando los valores por defecto,
 | 
						|
el archivo `layout` puede ser representado con el alias `@app/views/layouts/main.php`.
 | 
						|
 | 
						|
Puedes configurar esta propiedad con el valor `false` si quieres desactivar el `layout` por defecto, aunque esto sería un
 | 
						|
caso muy raro.
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::layoutPath|layoutPath]] <span id="layoutPath"></span>
 | 
						|
 | 
						|
Esta propiedad especifica el lugar por defecto donde deben buscarse los archivos `layout`. El valor por defecto
 | 
						|
es el sub-directorio `layouts` bajo el [`view path`](#viewPath). Si el [`view path`](#viewPath) usa su valor por defecto,
 | 
						|
el `layout path` puede ser representado con el alias `@app/views/layouts`.
 | 
						|
 | 
						|
Puedes configurarlo como un directorio o utilizar un [alias](concept-aliases.md).
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::runtimePath|runtimePath]] <span id="runtimePath"></span>
 | 
						|
 | 
						|
Esta propiedad especifica dónde serán guardados los archivos temporales, como archivos de log y de cache, pueden ser generados.
 | 
						|
El valor por defecto de esta propiedad es el alias `@app/runtime`.
 | 
						|
 | 
						|
Puedes configurarlo como un directorio o utilizar un [alias](concept-aliases.md). Ten en cuenta que el
 | 
						|
directorio debe tener permisos de escritura por el proceso que corre la aplicación. También este directorio debe estar protegido
 | 
						|
de ser accedido por usuarios finales, ya que los archivos generados pueden tener información sensible.
 | 
						|
 | 
						|
Para simplificar el acceso a este directorio, Yii trae predefinido el alias `@runtime` para él.
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::viewPath|viewPath]] <span id="viewPath"></span>
 | 
						|
 | 
						|
Esta propiedad especifica dónde están ubicados los archivos de la vista. El valor por defecto de esta propiedad está
 | 
						|
representado por el alias `@app/views`. Puedes configurarlo como un directorio o utilizar un [alias](concept-aliases.md).
 | 
						|
 | 
						|
 | 
						|
#### [[yii\base\Application::vendorPath|vendorPath]] <span id="vendorPath"></span>
 | 
						|
 | 
						|
Esta propiedad especifica el directorio `vendor` que maneja [Composer](https://getcomposer.org). Contiene
 | 
						|
todas las librerías de terceros utilizadas por tu aplicación, incluyendo el núcleo de Yii. Su valor por defecto
 | 
						|
está representado por el alias `@app/vendor`.
 | 
						|
 | 
						|
Puedes configurarlo como un directorio o utilizar un [alias](concept-aliases.md). Cuando modificas esta propiedad,
 | 
						|
asegúrate de ajustar la configuración de Composer en concordancia.
 | 
						|
 | 
						|
Para simplificar el acceso a esta ruta, Yii trae predefinido el alias `@vendor`.
 | 
						|
 | 
						|
 | 
						|
#### [[yii\console\Application::enableCoreCommands|enableCoreCommands]] <span id="enableCoreCommands"></span>
 | 
						|
 | 
						|
Esta propiedad está sólo soportada por [[yii\console\Application|aplicaciones de consola]].
 | 
						|
Especifica si los comandos de consola incluidos en Yii deberían estar habilitados o no.
 | 
						|
Por defecto está definido como `true`.
 | 
						|
 | 
						|
 | 
						|
## Eventos de la Aplicación <span id="application-events"></span>
 | 
						|
 | 
						|
Una aplicación dispara varios eventos durante su ciclo de vida al manejar un `request`. Puedes conectar
 | 
						|
manejadores a dichos eventos en la configuración de la aplicación como se muestra a continuación:
 | 
						|
 | 
						|
```php
 | 
						|
[
 | 
						|
    'on beforeRequest' => function ($event) {
 | 
						|
        // ...
 | 
						|
    },
 | 
						|
]
 | 
						|
```
 | 
						|
 | 
						|
El uso de la sintáxis `on nombreEvento` es descrita en la sección [Configuraciones](concept-configurations.md#configuration-format).
 | 
						|
 | 
						|
Alternativamente, puedes conectar manejadores de eventos durante el [`proceso de bootstrapping`](runtime-bootstrapping.md)
 | 
						|
después de que la instancia de la aplicación es creada. Por ejemplo:
 | 
						|
 | 
						|
```php
 | 
						|
\Yii::$app->on(\yii\base\Application::EVENT_BEFORE_REQUEST, function ($event) {
 | 
						|
    // ...
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
### [[yii\base\Application::EVENT_BEFORE_REQUEST|EVENT_BEFORE_REQUEST]] <span id="beforeRequest"></span>
 | 
						|
 | 
						|
Este evento es disparado *before* (antes) de que la aplicación maneje el `request`. El nombre del evento es `beforeRequest`.
 | 
						|
 | 
						|
Cuando este evento es disparado, la instancia de la aplicación ha sido configurada e inicializada. Por lo tanto es un
 | 
						|
buen lugar para insertar código personalizado vía el mecanismo de eventos para interceptar dicho manejo del `request`.
 | 
						|
Por ejemplo, en el manejador del evento, podrías definir dinámicamente la propiedad [[yii\base\Application::language]]
 | 
						|
basada en algunos parámetros.
 | 
						|
 | 
						|
 | 
						|
### [[yii\base\Application::EVENT_BEFORE_REQUEST|EVENT_AFTER_REQUEST]] <span id="afterRequest"></span>
 | 
						|
 | 
						|
Este evento es disparado *after* (después) de que una aplicación finaliza el manejo de un `request` pero *before* (antes) de enviar el `response` (respuesta).
 | 
						|
El nombre del evento es `afterRequest`.
 | 
						|
 | 
						|
Cuando este evento es disparado, el manejo del `request` está finalizado y puedes aprovechar para realizar algún
 | 
						|
post-proceso del mismo o personalizar el `response` (respuesta).
 | 
						|
 | 
						|
Ten en cuenta que el componente [[yii\web\Response|response]] también dispara algunos eventos mientras está enviando el contenido
 | 
						|
a los usuarios finales. Estos eventos son disparados *after* (después) de este evento.
 | 
						|
 | 
						|
 | 
						|
### [[yii\base\Application::EVENT_BEFORE_REQUEST|EVENT_BEFORE_ACTION]] <span id="beforeAction"></span>
 | 
						|
 | 
						|
Este evento es disparado *before* (antes) de ejecutar cualquier [acción de controlador](structure-controllers.md).
 | 
						|
El nombre de este evento es `beforeAction`.
 | 
						|
 | 
						|
El parámetro evento es una instancia de [[yii\base\ActionEvent]]. Un manejador de eventos puede definir
 | 
						|
la propiedad [[yii\base\ActionEvent::isValid]] como `false` para detener la ejecución de una acción.
 | 
						|
Por ejemplo:
 | 
						|
 | 
						|
```php
 | 
						|
[
 | 
						|
    'on beforeAction' => function ($event) {
 | 
						|
        if (..alguna condición..) {
 | 
						|
            $event->isValid = false;
 | 
						|
        } else {
 | 
						|
        }
 | 
						|
    },
 | 
						|
]
 | 
						|
```
 | 
						|
 | 
						|
Ten en cuenta que el mismo evento `beforeAction` también es disparado por [módulos](structure-modules.md)
 | 
						|
y [controladores)(structure-controllers.md). Los objectos aplicación son los primeros en disparar este evento,
 | 
						|
seguidos por módulos (si los hubiera), y finalmente controladores. Si un manejador de eventos define [[yii\base\ActionEvent::isValid]]
 | 
						|
como `false`, todos los eventos siguientes NO serán disparados.
 | 
						|
 | 
						|
 | 
						|
### [[yii\base\Application::EVENT_BEFORE_REQUEST|EVENT_AFTER_ACTION]] <span id="afterAction"></span>
 | 
						|
 | 
						|
Este evento es disparado *after* (después) de ejecutar cualquier [acción de controlador](structure-controllers.md).
 | 
						|
El nombre de este evento es `afterAction`.
 | 
						|
 | 
						|
El parámetro evento es una instancia de [[yii\base\ActionEvent]]. A través de la
 | 
						|
propiedad [[yii\base\ActionEvent::result]], un manejador de eventos puede acceder o modificar el resultado de una acción.
 | 
						|
Por ejemplo:
 | 
						|
 | 
						|
```php
 | 
						|
[
 | 
						|
    'on afterAction' => function ($event) {
 | 
						|
        if (..alguna condición...) {
 | 
						|
            // modificar $event->result
 | 
						|
        } else {
 | 
						|
        }
 | 
						|
    },
 | 
						|
]
 | 
						|
```
 | 
						|
 | 
						|
Ten en cuenta que el mismo evento `afterAction` también es disparado por [módulo](structure-modules.md)
 | 
						|
y [controladores)(structure-controllers.md). Estos objetos disparan el evento en orden inverso
 | 
						|
que los de `beforeAction`. Esto quiere decir que los controladores son los primeros en dispararlo,
 | 
						|
seguido por módulos (si los hubiera), y finalmente aplicaciones.
 | 
						|
 | 
						|
 | 
						|
## Ciclo de Vida de una Aplicación <span id="application-lifecycle"></span>
 | 
						|
 | 
						|
Cuando un [script de entrada](structure-entry-scripts.md) está siendo ejecutado para manejar un `request`,
 | 
						|
una aplicación experimenta el siguiente ciclo de vida:
 | 
						|
 | 
						|
1. El script de entrada carga el array de configuración de la aplicación.
 | 
						|
2. El script de entrada crea una nueva instancia de la aplicación:
 | 
						|
  * Se llama a [[yii\base\Application::preInit()|preInit()]], que configura algunas propiedades
 | 
						|
    de alta prioridad de la aplicación, como [[yii\base\Application::basePath|basePath]].
 | 
						|
  * Registra el [[yii\base\Application::errorHandler|manejador de errores]].
 | 
						|
  * Configura las propiedades de la aplicación.
 | 
						|
  * Se llama a [[yii\base\Application::init()|init()]] con la subsiguiente llamada a
 | 
						|
    [[yii\base\Application::bootstrap()|bootstrap()]] para correr componentes `bootstrap`.
 | 
						|
3. El script de entrada llama a [[yii\base\Application::run()]] para correr la aplicación:
 | 
						|
  * Dispara el evento [[yii\base\Application::EVENT_BEFORE_REQUEST|EVENT_BEFORE_REQUEST]].
 | 
						|
  * Maneja el `request`: lo resuelve en una [route (ruta)](runtime-routing.md) con los parámetros asociados;
 | 
						|
    crea el módulo, controlador y objetos acción como se especifica en dicha ruta; y entonces ejecuta la acción.
 | 
						|
  * Dispara el evento [[yii\base\Application::EVENT_AFTER_REQUEST|EVENT_AFTER_REQUEST]].
 | 
						|
  * Envía el `response` (respuesta) al usuario.
 | 
						|
4. El script de entrada recibe el estado de salida de la aplicación y completa el proceso del `request`.
 |