0 follower

Aplicación (Application)

Aplicación (Application) representa la el contexto de ejecución de cada pedido a la aplicación. Su principal tarea es resolver el pedido del usuario y dispararlo al controlador apropiado para procesamiento futuro. También se utiliza como el lugar principal para configuraciones que deben estar en el nivel de aplicación. Por esta razón application es también llamado front-controller (controlador principal).

Application es creado como un singleton por el script de entrada. El singleton Application puede ser accedido en cualquier lugar mediante Yii::app().

1. Configuración de Aplicación

Por predeterminado, application es una instancia de CWebApplication. Para customizarlo normalmente se provee un archivo de configuración (o un arreglo) para inicializar los valores de sus propiedades cuando la instancia application es creada. Una alternativa de personalizar la aplicación es extender CWebApplication.

La configuración es un arreglo de pares llave-valor (key-value). Cada par representa el nombre de una propiedad de la instancia de la aplicación y cada valor representa el valor inicial de la correspondiente propiedad. Por ejemplo, la siguiente configuración configura las propiedades name y defaultController de application.

array(
    'name'=>'Yii Framework',
    'defaultController'=>'site',
)

Usualmente guardamos la configuración en un archivo de script PHP separado (ejemplo: protected/config/main.php). Dentro del script retornamos el arreglo de configuración como a continuación:

return array(...);

Para aplicar estas configuraciones pasamos el nombre del archivo de configuración como parametro al constructor de application o a Yii::createWebApplication() como en el siguiente ejemplo el cual es usualmente utilizado en el Script de entrada:

$app=Yii::createWebApplication($configFile);

Tip: Si la configuración de la aplicación es muy compleja, podemos dividirla en varios archivos en donde cada uno devuelve una parte del arreglo de configuración. Para eso, en el archivo de configuración llamamos a la funcion PHP include() para incluir el resto de los archivos de configuración y fusionarlos en un arreglo de configuración completo.

2. Directorio Base de Application

El directorio base de Application refiere a la ruta de directorio que contiene todos los scripts PHP sensibles de seguridad y datos de la misma. Por predeterminado es un subdirectorio llamado protected que se encuentra bajo el directorio que contiene el Script de Entrada. Puede ser modificado configurando la propiedad basePath en la
configuración de application.

Las cosas que contiene el directorio base deben ser protegidas para que no sean accesibles por usuarios Web. Con el Apache HTTP server esto se realiza facilmente creando un archivo .htaccess dentro del directorio base. El contenido del archivo .htaccess debe ser el siguiente:

deny from all

3. Componentes de Application

Las funcionalidades de la aplicación pueden ser facilmente customizadas y enriquecidas con la arquitectura flexible de componentes. Application administra un juego de componentes de aplicación en los que cada uno implementa características específicas. Por ejemplo, appliction resuleve un pedido de usuario con la ayuda de los componentes CUrlManager y CHttpRequest.

Configurando la propiedad components de application, podemos personalizar la class y propiedades de cada uno de los componentes utilizados en application. Por ejemplo podemos configurara el componente CMemCache para que utilice multiples servers memcache para realizar el cacheo,

array(
    ......
    'components'=>array(
        ......
        'cache'=>array(
            'class'=>'CMemCache',
            'servers'=>array(
                array('host'=>'server1', 'port'=>11211, 'weight'=>60),
                array('host'=>'server2', 'port'=>11211, 'weight'=>40),
            ),
        ),
    ),
)

En el ejemplo anterior agregamos el elemento cache en el arreglo components. El elemento cache define que la clase del componente será CMemCache y la propiedadservers` debe ser inicializada como lo indica.

Para acceder a un componente de application utilice Yii::app()->ComponentID, en donde ComponentID indica el ID del componente que desea (ejemplo: Yii::app()->cache).

Un componente de aplicación puede ser deshabilitado mediante su configuración indicando la propiedad enabled con un valor false en su configuración. En el caso de intentar acceder a un componente deshabilitado, application le devolver Null.

Tip: Por predeterminado, los componentes de application son creados cuando se necesitan. Esto quiere decir que los componentes no serán creados si estos no son utilizados durante el request del usuario. Como resultado de esto, la performance no se vera degradada aún si la aplicación es configuradad con muchos componentes. Algunos componentes de aplicación deben ser creados sin importar si ellos son accedidos o no. Para esto, liste los IDs en la propiedad preload de la aplicación.

4. Componentes del nucleo de Application

Yii predefine un juego de compoenentes de aplicación que proveen caracteristicas comunes en toda la aplicación Web. Por ejemplo, el componente request es usado para resolver pedidos de usuarios y proveer de información como URL, cookies. Configurando las propiedades de estos componentes podemos cambiar el comportamiento de casi todos los aspectos de Yii.

Abajo se encuentra la lista de componentes predeclarados por CWebApplication.

5. Ciclos de vida de la Aplicación

Cuando se maneja un un pedido de usuario, la aplicación realizará el siguiente ciclo de vida:

  1. Configurará el autocargado de clases y el manejador de errores;

  2. Registrará los componentes del nucleo de la aplicación;

  3. Cargará la configuración de la aplicación;

  4. Inicializará la aplicación mediante CApplication::init()

    • Carga de compoenentes de aplicación static;
  5. Ejecuta el evento onBeginRequest;

  6. Procesa el pedido de usuario:;

    • Resuelve el pedido de usuario;
    • Crea el controlador
    • Ejecuta el controlador;

    7.Ejecuta el evento onEndRequest;

Found a typo or you think this page needs improvement?
Edit it on github !