apuntes taller yii

19
_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii DESCRIPCIÓN: El taller de introducción al desarrollo utilizando el Framework Yii, es una introducción teórica y práctica al concepto de programación orientada a objetos usando un framework, y al patrón de arquitectura MVC - Modelo Vista Controlador, donde los asistentes utilizarán las herramientas y opciones incorporadas en este framework, para el desarrollo rápido de aplicaciones. DIRIGIDO A: - Desarrolladores PHP que deseen comenzar a utilizar este framework - Estudiantes que necesiten aprender a utilizar herramientas de desarrollo de alto nivel - Programadores que busquen una forma eficiente y efectiva, de desarrollar aplicaciones de clase mundial, rápidamente y con menor esfuerzo. COMPETENCIAS QUE SE DESARROLLARÁN: - Capacidad de instalación y configuración del Framework Yii - Capacidad de diseño orientado a la arquitectura MVC - Capacidad para creación de aplicaciones web OBJETIVOS ESPECÍFICOS: - Saber instalar y configurar el Framework Yii - Saber modelar un sistema para implementarlo en el Framework - Saber implementar las rutinas CRUD de un sistema - Saber instalar extensiones y modificar el funcionamiento básico del Framework ____________________________________________________________________________ Fundación de Desarrollo Tecnológico Libre Página 1 de 19 http://www.fundaciongnuchile.cl [email protected]

Upload: arturo-m-gittens

Post on 02-Jan-2016

33 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

DESCRIPCIÓN:El taller de introducción al desarrollo utilizando el Framework Yii, es una introducción teórica y práctica al concepto de programación orientada a objetos usando un framework, y al patrón de arquitectura MVC - Modelo Vista Controlador, donde los asistentes utilizarán las herramientas y opciones incorporadas en este framework, para el desarrollo rápido de aplicaciones.

DIRIGIDO A:- Desarrolladores PHP que deseen comenzar a utilizar este framework- Estudiantes que necesiten aprender a utilizar herramientas de desarrollo de alto nivel- Programadores que busquen una forma eficiente y efectiva, de desarrollar aplicaciones de clase mundial, rápidamente y con menor esfuerzo.

COMPETENCIAS QUE SE DESARROLLARÁN:- Capacidad de instalación y configuración del Framework Yii- Capacidad de diseño orientado a la arquitectura MVC- Capacidad para creación de aplicaciones web

OBJETIVOS ESPECÍFICOS:- Saber instalar y configurar el Framework Yii- Saber modelar un sistema para implementarlo en el Framework- Saber implementar las rutinas CRUD de un sistema- Saber instalar extensiones y modificar el funcionamiento básico del Framework

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 1 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 2: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

CONTENIDOS:UNIDAD 1: INTRODUCCIÓN AL FRAMEWORK YIIObjetivo: Conocer los aspectos fundamentales de su funcionamiento

a) Introducción a la programación con arquitectura MVCb) Diseño de aplicaciones basándose en MVCc) Introducción al funcionamiento del Framework Yiid) Instalación y preparación del Frameworke) Configuración y conexión a una base de datos

UNIDAD 2: IMPLEMENTANDO OPERACIONES CRUDObjetivo: Implementar las funciones de operación con la base de datos

a) Uso de opciones y herramientas del Frameworkb) Construcción y composición del Scaffoldingc) Control de eventos (beforeSave() y afterSave())

UNIDAD 3: EXTENDIENDO LA FUNCIONALIDAD DE YIIObjetivo: Editar y controlar los componentes de la vista

a) Repositorio de componentes adicionalesb) Extendiendo el funcionamiento de Yiic) Agregando componentes a la vista con Yii (Ajax, Calendarios, Listas, etc)d) Modificando el Controlador y Modelo para soportar las funciones adicionales

UNIDAD 4: IMPLEMENTANDO AUTENTICACIÓN DE USUARIOSObjetivo: Agregar las funciones de control de acceso y permisos

a) Crear el repositorio de datos de usuariosb) Modificar el controlador y modelo para dar soporte a la autenticaciónc) Configurar las reglas de acceso, para otorgar permisos personalizados.

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 2 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 3: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

METODOLOGÍA:La metodología se ejecuta de modo tal que cada sesión se compone de una pequeña parte teórica y otra parte práctica, donde los participantes instalan,configuran y utilizan el Framework instalado en sus máquinas.

LAS ACTIVIDADES CONTEMPLAN:Introducción a la filosofía y lógica de funcionamiento del FrameworkSesiones divididas en módulos según temática conteniendo:o Ejercicios prácticos de uso y configuración:o Ejecución de Instruccioneso Búsqueda de información en Interneto Grupos de discusióno implementación de las soluciones

MATERIALES PROPORCIONADOS:1. Presentación del Taller

INFRAESTRUCTURA NECESARIA:1. Sala2. Un PC por participante3. Proyector4. Internet

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 3 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 4: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

Unidad 1: Introducción al Framework Yii

Objetivo: Conocer los aspectos fundamentales de su funcionamiento

a) Introducción a la programación con arquitectura MVC

Modelo Vista Controlador (MVC) es un patrón o modelo de abstracción de desarrollo 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, 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.

b) Diseño de aplicaciones basándose en MVC

Antes de comenzar con el diseño de aplicaciones, debemos conocer el flujo del funcionamiento básico del paradigma, por lo que observando la imagen a continuación, podremos describir su funcionamiento:

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 4 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 5: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

El Modelo:Esta es la representación específica de la información con la cual el sistema opera, en si, realiza la gestión sobre el repositorio de información, sea del tipo que sea dicho repositorio.

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

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

Aunque se pueden encontrar diferentes implementaciones de MVC, el flujo que sigue el control generalmente es el siguiente:

1. El usuario interactúa con la interfaz de usuario de alguna forma (por ejemplo, el usuario pulsa un botón, enlace, etc.)

2. El controlador recibe (por parte de los objetos de la interfaz-vista) la notificación de la acción solicitada por el usuario. El controlador gestiona el evento que llega, frecuentemente a través de un gestor de eventos (handler) o callback.

3. El controlador accede al modelo, actualizándolo, posiblemente modificándolo de forma adecuada a la acción solicitada por el usuario (por ejemplo, el controlador actualiza el carro de la compra del usuario). Los controladores complejos están a menudo estructurados usando un patrón de comando que encapsula las acciones y simplifica su extensión.

4. El controlador delega a los objetos de la vista la tarea de desplegar la interfaz de usuario. La vista obtiene sus datos del modelo para generar la interfaz apropiada para el usuario donde se reflejan los cambios en el modelo (por ejemplo, produce un listado del contenido del carro de la compra). El modelo no debe tener conocimiento directo sobre la vista. Sin embargo, se podría utilizar el patrón Observador para proveer cierta indirección entre el modelo y la vista, permitiendo al modelo notificar a los interesados de cualquier cambio. Un objeto vista puede registrarse con el modelo y esperar a los cambios, pero aun así el modelo en sí mismo sigue sin saber nada de la vista. Este uso del patrón Observador no es posible en las aplicaciones Web puesto

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 5 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 6: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

que las clases de la vista están desconectadas del modelo y del controlador. En general el controlador no pasa objetos de dominio (el modelo) a la vista aunque puede dar la orden a la vista para que se actualice.

5. La interfaz de usuario espera nuevas interacciones del usuario, comenzando el ciclo nuevamente.

c) Introducción al funcionamiento del Framework Yii

Yii es un framework para PHP de alto rendimiento basado en componentes web para desarrollar aplicaciones de gran escala. Permite una máxima reusabilidad en la programación web y puede acelerar significativamente el proceso de desarrollo.Yii es un framework genérico para programar Webs que puede ser utilizado para desarrollar virtualmente cualquier tipo de aplicaciones web. Ya que es liviano y está equipado con las soluciones mas sofisticadas, está especialmente diseñado para trabajar con aplicaciones web de trafico alto, como portales, foros, CMS, comercios electrónicos, etc.Como la mayoría de los framework para PHP , Yii es un framework que sigue el patrón de diseño MVC.Yii sobresale sobre los otros frameworks PHP por su eficiencia y su rica librería de funcionalidades así como también su clara documentación, puesto que es el resultado de la experiencia que tienen sus autores en el desarrollo de aplicaciones web ricas en funcionalidad y la investigación y reflejo de los frameworks y aplicaciones más populares para programar Webs.

Para crear aplicaciones utilizando Yii, debe seguir un simple proceso compuesto de 3 pasos:

• Crear la base de datos• Generar el código PHP de la base, utilizando Yii• Modificar el código para adecuarlo a sus necesidades.

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 6 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 7: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

Ejemplo de funcionamiento del framework Yii:

1. Un usuario hace una petición en la siguiente URL:http://www.example.com/index.php?r=post/show&id=1Y el servidor web maneja la petición ejecutando el script index.php.

2. El script crea una instancia de la aplicación y la ejecuta.3. La aplicacion obtiene la información detallada de la petición de los usuarios

desde un componente de la aplicación llamado request(petición).4. La aplicación determina la petición del controlador y actúa con la ayuda de

un componente de la aplicación llamado urlManager(manejador de url’s).5. Para este ejmplo, el controlador es Post que hace referencia a la clase

PostController; y la acción es show(mostrar) el cuál su significado es determinado por el controlador

6. La aplicación crea una instancia de la petición del controlador para mas adelante manejar la petición del usuario. El controlador determina que la acción show(mostrar) se refiere a un método llamado actionShow en la clase del controlador.

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 7 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 8: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

7. Entonces crea y ejecuta filtros (por ej: controles de acceso) asociados a esta acción. La acción es ejecutada si los filtros lo permiten.

8. La acción lee un modelo Post el cuál si ID es 1 en la base de datos.9. La acción asocia una vista llamada show(mostrar) con el modelo Post.10. La vista lee y muestra los atributos del modelo Post.11. La vista ejecuta algunos artilugios.12. Los resultados de la vista son embebidos en un diseño(layout)13. La acción completa la prestación de la vista y muestra el resultado al usuario.

d) Instalación y preparación del Framework

Para instalar Yii, existen 2 métodos, utilizar GIT para obtener la última versión o descargar la versión estable, sin embargo es recomendable hacerlo mediante este último método y actualizar el Framework con la versión oficial cada vez que una nueva esta disponible.

NOTA: Al actualizar hay que fijarse y tener cuidado con las recomendaciones que aparecen en el Changelog.

Instalar usando GIT:Al usar GIT, se descarga la última versión en desarrollo, por lo que podría generar algún inconveniente si la aplicamos a una implementación que este funcionando en producción.

Con GIT instalado, basta ejecutar lo siguiente:

git clone git @ github . com :yiisoft/yii.git

Instalar usando versión estable:Descargar versión estable desde http :// www . yiiframework . com / download / en la opción “stable version”, seleccionando bajar el archivo tar.gz o el zip.

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 8 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 9: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

Luego de obtener de alguna forma el framework, lo descomprimimos en alguna carpeta que no sea directamente visible desde el navegador.

NOTA:A pesar de que Yii recomienda dejar la carpeta disponible con acceso web, recomendamos no dejar disponible su instalación, para evitar problemas de seguridad, de todas formas, la funcionalidad no se verá afectada.

La carpeta descomprimida tiene varias carpetas en su interior, pero la que nos interesa es una llamada “Framework”.Para síntesis, se recomienda seguir el siguiente proceso, a fin de facilitar posteriores actualizaciones:

1. Crear una carpeta /en/alguna/parte/yii2. Mover la carpeta (algo así como yii-1.1.xxx), o la descargada con git, y la

movemos a la carpeta antes creada.3. Creamos un enlace /en/alguna/parte/yii/current y apuntamos a la carpeta

descomprimida.Con esto ya tendremos acceso al framework para hacer múltiples aplicaciones, y será fácilmente actualizable.

Para crear nuestra primera aplicación, podemos ejecutar un proceso bastante simple, siguiendo un proceso que se describe a continuación:

$ php /en/alguna/parte/yii/current/framework/yiic webapp /mi/carpeta/web/miapp

Esto crea en /mi/carpeta/web/miapp una aplicación lista para comenzar a modificar, disponible en la dirección http://www.example.com/miapp/index.php y cuya estructura de directorios se describe en la página siguiente.

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 9 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 10: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 10 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 11: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

e) Configuración y conexión a una base de datos

Para utilizar una base de datos, primero se debe configurar la aplicación para conectarse a la misma. Esto se realiza modificando el archivo de configuración de la aplicación WebRoot/miapp/protected/config/main.php como se muestra a continuación.

return array( ......

'components'=>array( ......

// para SQLite // db es el nombre de la base de datos

//por defecto que usará la aplicación 'db'=>array( 'connectionString'=>'sqlite:protected/data/source.db', ),

// lo siguiente para una base de datos MYSQL 'db'=>array( 'connectionString' => 'mysql:host=localhost;dbname=miapp', 'emulatePrepare' => true, 'username' => 'root', 'password' => '', 'charset' => 'utf8', 'tablePrefix' => '', ), ), ......);

En el ejemplo anterior agregamos la entrada db al arreglo de components (componentes) el cual indica a la aplicación que se conecte a la base de datos WebRoot/miapp/protected/data/source.db cuando sea necesario, o bien, a la base de datos “miapp” en el servidor MYSQL ubicado y ejecutandose en localhost.

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 11 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 12: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

Unidad 2: Implementando operaciones CRUD

Objetivo: Implementar las funciones de operación con la base de datos

a) Uso de opciones y herramientas del Framework

b) Construcción y composición del Scaffolding

La construcción del Scaffolding se logra realizando la configuración del componente Gii, lo que se hace modificando el archivo protected/config/main.php, en modules:

// uncomment the following to use Gii 'gii'=>array( 'class'=>'system.gii.GiiModule', 'password'=>'1234', // If removed, Gii defaults to localhost only. Edit carefully to taste. 'ipFilters'=>array('127.0.0.1','::1'), 'generatorPaths' => array( //'ext.giix.generators', // giix generators //'ext.giiplus', //'bootstrap.gii', ),

Con esto, vamos a http :// hostname / miapp / index . php / gii y veremos algo similar a la imagen que aparece en la siguiente página.

QUE ES EL SCAFFOLDLa palabra Scaffold está en inglés y en español significa Andamio, pero en programación el scaffolding es un método para construir aplicaciones basadas en bases de datos, esta técnica está soportada por algunos Frameworks del tipo MVC en el cuál el programador escribe una especificación que describe cómo debe ser usada la base de datos.

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 12 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 13: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

Para generar los modelos, basados en nuestras tablas ya creadas en nuestra base de datos, entramos a Model Generator, y veremos algo similar a esto:

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 13 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 14: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

En Table Name, ponemos el nombre de la tabla, sin embargo se debería completar automáticamente, así también en Model Class se completará solo según el nombre de la tabla, y según las convenciones de uso de mayúsculas del propio sistema.Luego hacer un Preview, para observar como debería quedar y Generate para generar los archivos.

NOTA:La ruta donde se van a generar los modelos debería ser inscribible por el servidor web, para que el Framework pueda escribir y generar los archivos.

Luego de esto, generamos el controlador respectivo, y las vistas básicas, es decir, el CRUD, para lo cual vamos a la opción CRUD Generator y se desplegará una pantalla similar a esta:

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 14 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 15: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

El campo Model Class se completara con los modelos que ya se han creado, y una vez ingresado, ControllerID también se llenará por si solo, manteniendo las convenciones. Luego repetiremos el proceso antes descrito, presionando Preview y Generate.

Para verificar que lo construido esta disponible, podremos acceder a la ruta respectiva utilizando el navegador.

c) Control de eventos (beforeSave() y afterSave())

Estos métodos permiten definir el comportamiento del sistema frente a la solicitud de guardar información, estos métodos podrán ejecutarse antes o después de almacenar la información. Estos metodos deben ser protected y se definen en el Modelo, ya que heredan de CModel.

protected function beforeSave(){

parent::beforeSave();

//pasamos el pass a md5 para guardarlo en la base de datos así$this->password = md5($this->password);

return true; // si no retorna true, debería lanzar una excepción}

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 15 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 16: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

Unidad 3: Extendiendo la funcionalidad de Yii

Objetivo: Editar y controlar los componentes de la vista

a) Repositorio de componentes adicionales

Gracias a su flexibilidad, el Framework puede ser extendido gracias a la inclusión de nuevos componentes, estos pueden obtenerse desde el repositorio oficial de extensiones, la que se encuentra en la siguiente dirección:

http :// yiiframework . com / extensions

b) Extendiendo el funcionamiento de Yii

Aunque el proceso de instalación de una extensión siempre esta descrita en el mismo repositorio de extensiones, puede ser necesario habilitar el modulo para que este disponible, esto se logra agregando su nombre en el arreglo de modules, modificando el archivo:protected/config/main.php

c) Agregando componentes a la vista con Yii (Ajax, Calendarios, Listas, etc)

Cuando las vistas son generadas, se generan con datos y formularios muy básicos, pero esto se puede mejorar realizando pequeñas modificaciones, por ejemplo, si uno quiere que un input normal, despliegue un calendario pretendiendo ingresar una fecha, basta con reemplazar el input:

echo $form->textField($model, 'date', array('maxlength' => 45));

Por algo como esto:

$this->widget('zii.widgets.jui.CJuiDatePicker', array( 'name'=>'Post[publication_date]',

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 16 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 17: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

'options'=>array( 'showAnim'=>'fold', 'changeMonth'=>true, 'changeYear'=>true, ), 'language'=>'es', 'htmlOptions'=>array( 'style'=>'height:20px;' ), ));

Donde observamos que Post es el nombre del modelo, date es el nombre del atributo, $form es un CactiveForm por lo que siempre se relaciona con un modelo, y genera el nombre (name) del input, de modo que la variable $_POST['Post'] tenga el mismo nombre, si fuera un input normal con valores por defecto.Por otro lado, es posible también implementar relaciones, de modo que si un repositorio utiliza una llave foránea se seleccione los posibles valores desde una lista, esto se logra como se muestra en el siguiente ejemplo:

echo $form->dropDownList($model, 'imagen_id', CHtml::listData(Imagen::model()->findAll(), 'id', 'nombre'), array('prompt'=>'Elija imagen...'))

d) Modificando el Controlador y Modelo para soportar las funciones adicionales

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 17 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 18: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

Unidad 4: Implementando Autenticación de Usuarios

Objetivo: Agregar las funciones de control de acceso y permisos

a) Crear el repositorio de datos de usuarios

b) Modificar el controlador y modelo para dar soporte a la autenticación por base de datos

Para permitir una simple autenticación mediante el uso del Modelo de gestión de usuarios, deberemos modificar el archivo:protected/components/UserIdentity.php

Y dejarlo como se despliega en el siguiente ejemplo:

public function authenticate(){$users=array(

// username => password// 'demo'=>'demo',// 'admin'=>'admin',

);$usersObjects = Usuario::model()->findAll();foreach($usersObjects as $u){

$users[$u->username] = $u->password;}

if(!isset($users[$this->username])) $this->errorCode=self::ERROR_USERNAME_INVALID; else if($users[$this->username]!==md5($this->password)) $this->errorCode=self::ERROR_PASSWORD_INVALID; else $this->errorCode=self::ERROR_NONE;

return !$this->errorCode;}

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 18 de 19http://www.fundaciongnuchile.cl – [email protected]

Page 19: Apuntes Taller Yii

_______________________TALLER INTRODUCCIÓN FRAMEWORK Yii

c) Configurar las reglas de acceso, para otorgar permisos personalizados.

http :// www . yiiframework . com / wiki /328/ simple - rbac http :// www . yiiframework . com / wiki /120/ introduccion - al - control - de - acceso - basado - en - roles - rbac

____________________________________________________________________________Fundación de Desarrollo Tecnológico Libre Página 19 de 19http://www.fundaciongnuchile.cl – [email protected]