martes, 31 de enero de 2012

Framework Yii




Esta en mi primera contribución en cuanto a patrones de desarrollo de software y utilización de framework Yii como ejemplo, espero criticas, gracias.


Presentación

En la actualidad el patrón Modelo Vista Controlador (MVC) está muy difundido a nivel de programación web, pues tiene como objeto separar la lógica del negocio de las consideraciones de la interfaz de usuario para que los desarrolladores puedan modificar cada parte más fácilmente sin afectar a la otra. En este contexto se requiere un conjunto estandarizado de conceptos, prácticas y criterios para enfocar este patrón, es decir se precisa de un framework que facilite estos.

El presente trabajo está dirigido a toda aquella persona con conocimientos básicos en programación web, que quiera trabajar en un nuevo enfoque, y en una forma estándar de programación, dejando atrás la artesanía, en este afán se hará estudio del framework Yii en PHP, que trabaja con el patrón MVC.



“Codifica siempre como si la persona que finalmente mantendrá tu código fuera un psicópata violento que sabe dónde vives”

Martin Golding




Tabla de contenido

Resumen.
Capítulo I: Aspectos Generales

1.1. Objetivos
1.2. Patrón Modelo Vista Controlador
Capítulo II: Framework Yii
2.1. ¿Qué es Yii?
2.2. Requerimientos
2.3. Como se compara Yii con otros framework

2.4. Instalación.
2.5. Creando la primera aplicación.
2.6. Estructura de directorios.

2.7. Convenciones. 15
2.8. Conexión a la base de datos.
2.9. Operación CRUD.

2.10. Modelo Vista Controlador de Yii
2.11. Script de entrada.

2.12. Aplicación. 
2.13. Controlador.
Referencia.
Conclusiones.




Resumen

En el capítulo I se establece los objetivos a cumplir, así mismo se desarrollara los conceptos sobre el patrón Modelo Vista Controlador (MVC) necesarios para tener una vista general sobre el modo de trabajo de éste, esto nos servirá como base en el entendimiento del framework en estudio.

En el capítulo II se detalla Framework Yii, se da una breve definición acerca de este framework, ventajas frente a otros, estructura, su instalación, y una aplicación sencilla utilizando la línea de comandos.


Capítulo I: Aspectos Generales

1.1.Objetivos

· Comprender el patrón Modelo Vista Controlador.

· Comprender e instalar el framework Yii.

· Realizar una aplicación sencilla, utilizando la herramienta de línea de comandos del framework Yii.


1.2.Patrón Modelo Vista Controlador

Modelo Vista Controlador (MVC) es un patrón de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de negocio en tres componentes distintos. El patrón de llamada y retorno MVC (según CMU), se ve frecuentemente en aplicaciones web, donde la vista es la página HTML y el código que provee de datos dinámicos a la página. El modelo es el Sistema de Gestión de Base de Datos y la Lógica de negocio, y el controlador es el responsable de recibir los eventos de entrada desde la vista.

Modelo: Esta es la representación específica de la información con la cual el sistema opera. En resumen, el modelo se limita a lo relativo de la vista y su controlador facilitando las presentaciones visuales complejas. El sistema también puede operar con más datos no relativos a la presentación, haciendo uso integrado de otras lógicas de negocio y de datos afines con el sistema modelado.

Vista: Este presenta el modelo en un formato adecuado para interactuar, usualmente la interfaz de usuario.

Controlador: Este responde a eventos, usualmente acciones del usuario, e invoca peticiones al modelo y, probablemente, a la vista.

Figura 1.0: Patrón MVC
Capítulo II: Framework Yii

2.1.¿Qué es Yii?

Yii es un proyecto de código abierto distribuido bajo los términos de la licencia BSD. Esto significa que usted puede utilizar Yii gratis para desarrollar aplicaciones Web, ya sea de código abierto o propietario. Yii es un framework PHP basado en componentes de alta performance para desarrollar aplicaciones web de gran escala. El mismo permite la máxima reutilización en la programación web y puede acelerar el proceso de desarrollo. El nombre Yii, esta dado por lo fácil, eficiente y extensible que es su uso.

2.2.Requerimientos

La última versión estable de Yii es de 1.1.9, de forma segura puede utilizar esta versión en sus aplicaciones Web de producción. Continuo apoyo y correcciones de errores para esta versión se proporcionará hasta 31 de diciembre de 2012. La próxima versión principal será 2,0. Requiere de PHP 5.1.0 o superior.

2.3.Como se compara Yii con otros framework

  • Como la mayoría de los frameworks PHP, Yii es un framework MVC (modelo-vista-controlador). 
  • Yii sobresale frente a frameworks PHP en su eficiencia, su gran cantidad de características y su clara documentación. 
  • Yii ha sido diseñado cuidadosamente desde el principio para el desarrollo de aplicaciones de Web. No es ni un subproducto de un proyecto ni un conglomerado de trabajo de terceros. 
  • Es el resultado de la vasta experiencia de los autores en desarrollo de aplicaciones web y de la investigación y la reflexión de los más populares frameworks de programación web y aplicaciones.

2.4.Instalación

Para instalar el Yii se deben seguir dos pasos:

Paso1: Descargar el framework Yii de yiiframework.com.

Paso2: Descomprimir el archivo a un directorio accesible por el servicio web. Ejemplo: c: /wamp/www.

Luego de descomprimir el archivo cambie el nombre del directorio a Yii para un fácil manejo.

Luego de instalar Yii, se debe verificar si su server satisface todos los requerimientos para utilizar Yii. Para hacerlo debe hacer accesible el script de verificación de requerimientos para utilizar Yii. Se puede acceder al script de verificación de requerimientos en la siguiente URL en un explorador web: http://hostname/yii/requirements/index.php.


Figura 2.0: Verificación de requerimientos para Yii



2.5. Creando la primera aplicación.

Para crear la primera aplicación ejecute en lo siguiente en la línea de comandos:

Figura 2.1: Línea de comandos para crear la aplicación en Yii.


Esto creará una aplicación Yii esqueleto en el directorio c:\wamp\www\aplicacion. Esta aplicación contiene la estructura de directorios requerida por la mayoría de las aplicaciones Yii. 

Sin escribir ni una sola línea de código, nosotros podemos probar nuestra primera aplicación Yii ingresando a la siguiente URL en un explorador Web: http://localhost/aplicacion.


Figura 2.2: Primera Aplicación en Yii.


Como vemos, la aplicación contiene tres páginas: homepage (la página inicial), contact (página de contacto) y login (página de login de usuario). La página inicial muestra información de la aplicación y del estado del usuario logueado, la página de contacto contiene un formulario para rellenar y enviar sus consultas y la página de login de usuario permite a los mismos autenticarse para acceder a contenidos que necesitan privilegios de acceso. 


2.6.Estructura de directorios

La siguiente Figura muestra la estructura de directorios de la aplicación.

testdrive/
   index.php                 archivo de entrada de la aplicación Web
   assets/                   contiene archivos de recursos públicos
   css/                      contiene archivos CSS
   images/                   contiene archivos de imágenes
   themes/                   contiene temas de la aplicación
   protected/                contiene los archivos protegidos de la aplicación
      yiic                   script de linea de comandos yiic
      yiic.bat               script de linea de comandos yiic para Windows
      commands/              contiene comandos 'yiic' personalizados
         shell/              contiene comandos 'yiic shell' personalizados
      components/            contiene componentes reusables
         MainMenu.php        clase de widget 'MainMenu'
         Identity.php        clase 'Identity' utilizada para autenticación
         views/              contiene los archivos de vistas para los widgets
            mainMenu.php     el archivo vista para el widget 'MainMenu'
      config/                contiene archivos de configuración
         console.php         configuración aplicación consola
         main.php            configuración de la aplicación Web
      controllers/           contiene los archivos de clase de controladores
         SiteController.php  la clase controlador predeterminada
      extensions/            contiene extensiones de terceros
      messages/              contiene mensajes traducidos
      models/                contiene archivos clase de modeloscontaining model class files
         LoginForm.php       el formulario modelo para la acción 'login'
         ContactForm.php     el formulario modelo para la acción 'contact'
      runtime/               contiene archivos temporarios generados
      views/                 contiene archivos de vista de controladores y de diseño
         layouts/            contiene archivos de diseño
            main.php         el diseño default para todas las vistas
         site/               contiene archivos vista para el controlador 'site'
            contact.php      contiene la vista para la acción 'contact'
            index.php        contiene la vista para la acción 'index'
            login.php        contiene la vista para la acción 'login'
         system/             contiene archivos de vista del sistema

Figura 2.3: Estructura de directorios de una aplicación Yii


2.7.Convenciones

URL.
  • http://hostname/index.php?r=ControllerID/ActionID
  • La variable GET r se refiere a la ruta que puede ser resuelta por Yii en controlador y acción.
Código.

  • Nombrar variables, funciones y clases en camelCase.
  • Las variables y funciones deben tener su primera letra en minúscula para diferenciarla de los nombres de las clases. (ejemplo: $basePath, runController(),LinkPager)
  • Para miembros de clase privado es recomendado ponerles de prefijo a sus nombres un guión bajo (ejemplo: $_actionsList).
  • Una regla especial para las clases Controller es que deben finalizar con la palabra Controller.
  • El ID del controlador será definido por el nombre de la clase con su primer letra en minúscula y la palabra Controller truncada del mismo. Por ejemplo la clase PageController tendra el ID page (/index.php?r=page/index en vez de /index.php?r=PageController/índex).

Archivo

  • Archivos de clase deben ser llamados como la clase que contienen. Por ejemplo, la clase CController se encuentra en el archivo CController.php.
  • Una clase pública es una clase que puede ser utilizada por otras clases.
  • Cada archivo de clase debe contener al menos una clase pública.
  • Las clases privadas (clases que solo son utilizadas por una única clase pública) deben residir en el mismo archivo que la clase pública.
  • Los archivos de vistas deben ser llamados con el nombre de la vista. Por ejemplo, la vista index debe encontrase en el archivo index.php.
  • Los archivos de configuración puede ser nombrados arbitrariamente. Un archivo de configuración es un script PHP con el solo propósito de devolver un arreglo representando la configuración.

2.8.Conexión a la base de datos

Para configurar la base de datos con la que se va a trabajar se tiene que editar el siguiente archivo: WebRoot/Aplicacion/protected/config/main.php 

Descomenta la base de datos con la que se desea trabajar



Figura 2.4: Descomentar y agregar los parámetros de la base de datos.


2.9. Operación CRUD.

En vez de estar lidiando con escribir el código actual podemos utilizar la poderosa herramienta yiic nuevamente para automatizar la generación de código por nosotros. Este proceso es también conocido como scaffolding. Abre una ventana de línea de comandos y ejecuta los comandos listados a continuación:

php -c path/to/php.ini protected/yiic.php shell
model usuario
crud usuario


En el código anterior utilizamos el comando yiic shell para interactuar con la aplicación esqueleto. Hemos ejecutado dos comandos: model User y crud User. El primero genera la clase Modelo para la tabla User, mientras que el segundo lee el modelo User y genera el código necesario para las operaciones CRUD.


2.10. Modelo Vista Controlador de Yii

Yii implementa el diseño de patrón modelo vista controlador (model-view-controller MVC) el cual es adoptado ampliamente en la programación Web.

MVC tiene por objeto separar la lógica del negocio de las consideraciones de la interfaz de usuario para que los desarrolladores puedan modificar cada parte más fácilmente sin afectar a la otra.

En MVC el modelo representa la información (los datos) y las reglas del negocio; la vista contiene elementos de la interfaz de usuario como textos, formularios de entrada; y el controlador administra la comunicación entre la vista y el modelo.

Más allá del MVC, Yii también introduce un front-controller llamado aplicación el cual representa el contexto de ejecución del procesamiento del pedido. La aplicación resuelve el pedido del usuario y la dispara al controlador apropiado para tratamiento futuro.


Figura 2.5: Estructura estática de una aplicación Yii.

El siguiente diagrama muestra un típico flujo de tareas de una aplicación Yii cuando resuelve un pedido de usuario.


Figura 2.6: Fluyo de tareas de una aplicación Yii.


  • Un usuario realiza un pedido con la siguiente URL http://www.example.com/index.php?r=post/show&id=1 y el servidor Web se encarga de la solicitud mediante la ejecución del script de arranque en index.php.
  • El script de entrada crea una instancia de aplicación y la ejecuta.
  • La aplicación obtiene la información detallada del pedido del usuario del componente de aplicación request.
  • El controlador determina el controlador y la acción pedido con ayuda del componente de aplicación llamado urlManager. Para este ejemplo el controlador es post que refiere a la clasePostController y la acción es show que su significado es determinado por el controlador.
  • La aplicación crea una instancia del controlador pedido para resolver el pedido del usuario. El controlador determina que la acción show refiere al nombre de método actionShow en la clase controlador. Entonces crea y ejecuta los filtros asociados con esta acción (ejemplo: control de acceso, benchmarking). La acción es ejecutado si los filtros lo permiten.
  • La acción lee el modelo Post cuyo ID es 1 de la base de datos.
  • La acción realiza la vista llamada show con el modelo Post
  • La vista lee y muestra los atributos del modelo Post.
  • La vista ejecuta algunos widgets.
  • El resultado realizado es embebido en un esquema (layout).
  • La acción completa la vista realizada y se la muestra al usuario.

2.11. Script de entrada


El script de entrada es el script de inicio y es el que se ocupa de procesar el pedido del usuario inicialmente. Es el único script PHP que el usuario puede pedir directamente para ejecutarse.

Figura 2.7: Crea la instancia de la aplicación y su configuración especifica.


Este script incluye el archivo principal de Yii framework yii.php, crea la instancia de aplicación web con la configuración especificada e inicia su ejecución.


Modo Debug

Una aplicación Yii puede correr en modo debug o modo producción según el valor de la constante YII_DEBUG. Por predeterminado el valor de esta constante es false lo que significa modo producción. Para correr su aplicación en modo debug defina esta constante con el valor true antes de incluir el archivo yii.php. Para realizarlo diríjase al archivo WebRoot/Aplicacion/index.php 


2.12.Aplicación


Aplicación (Application) representa 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).

Configuración 

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. 


2.13.Controlador

Un controlador es una instancia de CController o una de las clases que lo heredan. Es creado por la aplicación cuando un usuario realiza un pedido para ese controlador. 

Abajo se encuentra el mínimo código de una clase controlador. Dado que este controlador no tiene ninguna acción definida, pedirle resultará en una excepción. 
Figura 2.8: Código mínimo de una clase controlador.



Referencia

Framework Yii
Http: //www.yiiframework.com/doc/guide/1.1/es/, pagina visita 06 de diciembre del 2011.