mirror of
https://github.com/yiisoft/yii2.git
synced 2025-08-14 06:11:35 +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`.
|