manos a la obra con yupp php framework
DESCRIPTION
TRANSCRIPT
![Page 1: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/1.jpg)
Manos a la obra conYupp PHP Framework
Pablo Pazos Gutiérrezhttp://code.google.com/p/yupp/
![Page 2: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/2.jpg)
Agenda (1:55)Instalación - 10'Configuración - 5'Estructura del Framework - 5'URLs en Yupp - 5'Creando una aplicación - 10'ORM - 45'• Creando una clase persistente• Configurando la BD por aplicación• Script de arranque (bootstrap)• Relaciones hasOne• Acciones y vistas de infraestructura (scaffolding) • Relaciones hasMany• Verificando restricciones• Uso del belongsTo
Controladores y acciones - 20'Vistas y helpers - 15'
![Page 3: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/3.jpg)
Cap 3: Instalando Yupp
Precondiciones:• Apache, PHP5, MySQL• Instalemos WAMP! (solo para Windows)• MOD_REWRITE activado• No hay restricciones especiales para linux…
• Pero cuidado con los permisos de lectura/escritura de directorios Instalando:• Copiar el directorio de Yupp en el www del WAMP• Acceder a http://localhost/yupp• ¿Vemos el escritorio? Yuppy!
• ¿Nos da un error?, verificar que MOD_REWRITE está activoo LoadModule rewrite_module modules/mod_rewrite.so en httpd.conf
del Apache
![Page 4: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/4.jpg)
Cap 3: Configurando Yupp
Base de Datos:• ¿Error de que no existe la base de datos?
o Crear la base de datos en el PHPMyAdmin http://localhost/phpmyadmin
¿Dónde se define la conexión con la bd? Config: yupp/core/config/core.config.YuppConfig.class.php También se configuran:
Modos de ejecución Idiomas soportados (para i18n) Puntos de entrada al framework
![Page 5: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/5.jpg)
Cap 4: estructura del framework
Estructura del framework:• apps• core
o dbo persistento routingo mvco ...
• css• images• js• .htaccess• index.php
![Page 6: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/6.jpg)
Cap 5: URLs en Yupp
Ejemplo 1: pasaje explícito de paramshttp://localhost/yupp/app/controller/action?param1=value1¶m2=value2• aplicación• controlador• acción• parámetros
Ejemplo 2: pasaje implícito de paramshttp://localhost/yupp/app/controller/action/value1/value2• aplicación• controlador• acción• _param_1, _param_2
![Page 7: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/7.jpg)
Cap 6: Creando una aplicación!
Nueva aplicación:• nombre: "biblioteca"• descripción: "aplicacion para gestion de libros"• lenguage: "es"• controlador: "libro"
Estructura de la aplicación: ver yupp/apps/biblioteca• bootstrap• config• model: clases persistentes del modelo de información• views: generan la interfaz gráfica del usuario• controllers: procesamiento de pedidos de usuarios• tests• app.xml
![Page 8: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/8.jpg)
Cap 6: Creando la clase Libro
Copiar desde:• Aplicacion\cap 6\biblioteca\model\biblioteca.model.Libro.class.php
Hacia:• C:\wamp\www\yupp\apps\biblioteca\model
Expliquemos el código de la clase Libro:• extends PersistentObject• constructor• campos• constructor de superclase
Generemos las tablas!• veamos lo generado: http://localhost/phpmyadmin
![Page 9: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/9.jpg)
Cap 7: Config. de BD por aplicación
Copiar desde:• Aplicacion\cap 7\biblioteca\config\db_config.php
Hacia:• C:\wamp\www\yupp\apps\biblioteca\config
Explicación Intentemos regenerar las tablas• Debemos crear la base de datos previamente
![Page 10: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/10.jpg)
Cap 7: Script de arranque
Copiar desde:Aplicacion\cap 7\biblioteca\bootstrap\apps.biblioteca.bootstrap.Bootstrap.script.php
Hacia:C:\wamp\www\yupp\apps\biblioteca\bootstrap
Explicación del código Ejecutemos el script de arranque!• ¿Vemos el contenido en la base?
![Page 11: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/11.jpg)
Cap 8.1 Relaciones hasOne
Nuevo:• Model:
o Clase Autoro Libro hasOne Autor
• Bootstrap:o Ahora crea autores (ejecutar antes que tests)
• Test:o Al primer libro creado en bootstrap le asocia un autor
Procedimiento:• copiar ejemplo• eliminar estructura de la db y regenerar• ejecutemos boostrap • ejecutemos test y miremos la db
![Page 12: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/12.jpg)
Acciones y vistas de infraestructura
Entrar a:http://localhost/yupp/biblioteca/libro/list
Vista "list": auto-generada y navegable• Podemos crear un nuevo libro (create)• Ver los detalles de un libro (show)• Editar los datos de un libro (edit)• Volver al listado (list)• Eliminar un libro (delete)• Navegar hacia el autor del libro (show)
o Notar que ni siquiera hay un controlador creado Tenemos un sistema de información muy básico sin necesidad de programar la lógica de altas, bajas y modificaciones, ni las vistas
![Page 13: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/13.jpg)
Cap 8.2 Relaciones hasMany
Nuevo:• Model:
o Libro tiene varios coautores• Test: (veamos el código)
1.crea un libro y le asocia autor y 2 coautores2.quita uno de los coautores al libro
Procedimiento:• copiar ejemplo• eliminar estructura de la db y regenerar• ejecutemos test y miremos la db
• Primero solo el test 1 y luego solo el test 2
![Page 14: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/14.jpg)
Cap 8.4 Verificando restricciones
Nuevo:• Model: (veamos el código!)
o Restricción en el nombre del autoro Restricción en el número de páginas del libro
• Tests:o Test de validación que falla para mostrar violación de
restricciones Procedimiento:• copiar ejemplo• eliminar estructura de la db y regenerar• ejecutemos test para ver la verificación de restricciones
![Page 15: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/15.jpg)
Cap 8.6 Salvar en cascada: belongsToReglas:
1. A(*)->(1)B: Yupp no sabe cual lado es el fuerte, necesita belongsTo explícito2. A(1)<->(1)B: Yupp no sabe cual es el lado fuerte, necesita belongsTo explícito3. A(1)->(*)B: Yupp considera que B belongsTo A4. A(1)<->(*)B: Yupp considera que B belongsTo A5. A(*)->(*)B: Yupp considera que B belongsTo A6. A(*)<->(*)B: Yupp no sabe cual es el lado fuerte, necesita belongsTo explícito
Importante: Si B belongsTo A, cuando una instancia de A tiene uno (hasOne) o muchos (hasMany) Bs, al salvar A, se salvan sus Bs asociados (en cascada).
![Page 16: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/16.jpg)
Cap 8.6 Salvar en cascada: belongsToNuevo:• Modelo:
o Autor belongsTo Libroo Explício porque es Libro(*)->(1)Autor
• Tests:o Salvar en cascada hasOne (gracias al belongsTo)
Procedimiento:• copiar ejemplo• no es necesario regenerar porque no cambió la estructura• ejecutemos test para ver que el libro salva su autor en
cascada
No vamos a mostrar ejemplo para ahorrar tiempo, lo pueden probar luego.
![Page 17: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/17.jpg)
Cap 9: Controladores
Nuevo:• Acciones en LibroController (veamos el código!)
o redirect en acción "index"o generación de JSONo generación de XML
• Bootstrapo Da de alta algunos libros con autor y coautores
Procedimiento:• borrar el contenido de las tablas en la bd
• Como no cambiamos el modelo, no cambia la estructura, entonces no necesitamos regenerar las tablas.
• ejecutar el bootstrap
![Page 18: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/18.jpg)
Cap 9: Controladores
Prueba 1: redirección• Acción index del controlador LibroController redirige a "list"• return $this->redirect( array('action'=>'list') );• Ver el comportamiento del pedido HTTP
Prueba 2: generación de JSON• http://localhost/yupp/biblioteca/libro/jsonShow?id=1• Probemos la generación recursiva!
Prueba 3: generación de XML• http://localhost/yupp/biblioteca/libro/xmlShow?id=1• Probemos la generación recursiva!
![Page 19: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/19.jpg)
10. Vistas
Nuevo:• Vistas:
o views/libro/list.view.phpo views/libro/details.template.php
• Controladores y acciones:o Acción "list" implementada en LibroControllero Se agrega sleep a acción jsonShow
para prueba de helper ajax_link
Proceso:• Copiamos cosas nuevas• Explicación del código del controlador• Explicación del código de la vista• Probamos vista y ajax_link• Probamos template, descomentando el código en la vista
![Page 20: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/20.jpg)
Conclusiones
Múltiples usuarios:
![Page 21: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/21.jpg)
Conclusiones
Agilidad:• Quitar tareas tediosas y repetitivas• Subir el nivel del desarrollo
o Programar el modelo de objetos, sin necesidad de diseñar el modelo de bases de datos
o Poco o nada de programar y mantener SQL• Programación estandarizada
o Estructuras y convenciones conocidas y predecibles
![Page 22: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/22.jpg)
Conclusiones
Agilidad:• Pequeña curva de aprendizaje
o Una vez superada, se saca jugo a las convencioneso La performance de programación aumentao Rápido prototipado: "algo para mostrarle al cliente"o Liberaciones frecuentes, mejora visibilidad y feedback
• Flexible para implementar cualquier tipo de sistema web• Flexible para integrar con otros sistemas• Diseñado para extenderse y adaptarse a nuevas
necesidades
![Page 23: Manos a la obra con Yupp PHP Framework](https://reader033.vdocuments.mx/reader033/viewer/2022042813/54859699b4af9fbd5d8b49e9/html5/thumbnails/23.jpg)
¿Cómo seguir?Documentación http://www.simplewebportal.net/yupp_framework_php_doc
Grupohttp://groups.google.com/group/yuppframeworkphp
Bloghttp://yuppframework.blogspot.com Sitio en Google Codehttp://code.google.com/p/yupp
Código fuente (SVN de desarrollo)http://yupp.googlecode.com/svn/trunk/YuppPHPFramework/
Bugshttp://code.google.com/p/yupp/issues/list