Manos a la obra con Yupp PHP Framework Pablo Pazos Gutiérrez http://code.google.com/p/yupp/
Agenda (1:55) <ul><li>Instalación - 10' </li></ul><ul><li>Configuración - 5' </li></ul><ul><li>Estructura del Framework - ...
Cap 3: Instalando Yupp <ul><li>Precondiciones: </li></ul><ul><ul><li>Apache, PHP5, MySQL </li></ul></ul><ul><ul><li>Instal...
Cap 3: Configurando Yupp <ul><li>Base de Datos: </li></ul><ul><ul><li>¿Error de que no existe la base de datos? </li></ul>...
Cap 4: estructura del framework <ul><li>Estructura del framework: </li></ul><ul><ul><li>apps </li></ul></ul><ul><ul><li>co...
Cap 5: URLs en Yupp <ul><li>Ejemplo 1: pasaje explícito de params </li></ul><ul><li>http://localhost/yupp/app/controller/a...
Cap 6: Creando una aplicación! <ul><li>Nueva aplicación: </li></ul><ul><ul><li>nombre: &quot;biblioteca&quot; </li></ul></...
Cap 6: Creando la clase Libro <ul><li>Copiar desde: </li></ul><ul><ul><li>Aplicacioncap 6bibliotecamodelbiblioteca.model.L...
Cap 7: Config. de BD por aplicación <ul><li>Copiar desde: </li></ul><ul><ul><li>Aplicacioncap 7bibliotecaconfigdb_config.p...
Cap 7: Script de arranque <ul><li>Copiar desde: </li></ul><ul><li>Aplicacioncap 7bibliotecabootstrapapps.biblioteca.bootst...
Cap 8.1 Relaciones hasOne <ul><li>Nuevo: </li></ul><ul><ul><li>Model: </li></ul></ul><ul><ul><ul><li>Clase Autor </li></ul...
Acciones y vistas de infraestructura <ul><li>Entrar a: </li></ul><ul><li>http://localhost/yupp/biblioteca/libro/list </li>...
Cap 8.2 Relaciones hasMany <ul><li>Nuevo: </li></ul><ul><ul><li>Model: </li></ul></ul><ul><ul><ul><li>  Libro tiene varios...
Cap 8.4 Verificando restricciones <ul><li>Nuevo: </li></ul><ul><ul><li>Model: (veamos el código!) </li></ul></ul><ul><ul><...
Cap 8.6 Salvar en cascada: belongsTo <ul><li>Reglas: </li></ul><ul><ul><li>A(*)->(1)B: Yupp no sabe cual lado es el fuerte...
Cap 8.6 Salvar en cascada: belongsTo <ul><li>Nuevo: </li></ul><ul><ul><li>Modelo: </li></ul></ul><ul><ul><ul><li>Autor bel...
Cap 9: Controladores <ul><li>Nuevo: </li></ul><ul><ul><li>  Acciones en LibroController (veamos el código!) </li></ul></ul...
Cap 9: Controladores <ul><li>Prueba 1: redirección </li></ul><ul><ul><li>Acción index del controlador LibroController redi...
10. Vistas <ul><li>Nuevo: </li></ul><ul><ul><li>Vistas: </li></ul></ul><ul><ul><ul><li>views/libro/list.view.php </li></ul...
Conclusiones <ul><li>Múltiples usuarios: </li></ul>
Conclusiones <ul><li>Agilidad: </li></ul><ul><ul><li>Quitar tareas tediosas y repetitivas </li></ul></ul><ul><ul><li>Subir...
Conclusiones <ul><li>Agilidad: </li></ul><ul><ul><li>Pequeña curva de aprendizaje </li></ul></ul><ul><ul><ul><li>Una vez s...
¿Cómo seguir? <ul><li>Documentación  </li></ul><ul><li>http://www.simplewebportal.net/yupp_framework_php_doc </li></ul><ul...
¡Gracias! Pablo Pazos Gutiérrez [email_address]
Upcoming SlideShare
Loading in …5
×

Manos a la obra con Yupp PHP Framework

1,243 views
1,134 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,243
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
33
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Manos a la obra con Yupp PHP Framework

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

×