• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Manos a la obra con Yupp PHP Framework
 

Manos a la obra con Yupp PHP Framework

on

  • 1,337 views

 

Statistics

Views

Total Views
1,337
Views on SlideShare
1,336
Embed Views
1

Actions

Likes
0
Downloads
29
Comments
0

1 Embed 1

http://www.linkedin.com 1

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Manos a la obra con Yupp PHP Framework Manos a la obra con Yupp PHP Framework Presentation Transcript

    • Manos a la obra con Yupp PHP Framework Pablo Pazos Gutiérrez http://code.google.com/p/yupp/
    • 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'
    • 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á activo
            • LoadModule rewrite_module modules/mod_rewrite.so en httpd.conf del Apache
    • Cap 3: Configurando Yupp
      • Base de Datos:
        • ¿Error de que no existe la base de datos?
          • 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
    • Cap 4: estructura del framework
      • Estructura del framework:
        • apps
        • core
          • db
          • persistent
          • routing
          • mvc
          • ... 
        •   css
        • images
        • js
        • .htaccess
        • index.php
    • Cap 5: URLs en Yupp
      • Ejemplo 1: pasaje explícito de params
      • http://localhost/yupp/app/controller/action?param1=value1&param2=value2
        • aplicación
        • controlador
        • acción
        • parámetros
      • Ejemplo 2: pasaje implícito de params
      • http://localhost/yupp/app/controller/action/value1/value2
        • aplicación
        • controlador
        • acción
        • _param_1, _param_2
    • 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
    • Cap 6: Creando la clase Libro
      • Copiar desde:
        • Aplicacioncap 6bibliotecamodelbiblioteca.model.Libro.class.php
      •  
      • Hacia:
        • C:wampwwwyuppappsbibliotecamodel
      •  
      • Expliquemos el código de la clase Libro:
        • extends PersistentObject
        • constructor
        • campos
        • constructor de superclase
      • Generemos las tablas!
        • veamos lo generado: http://localhost/phpmyadmin
    • Cap 7: Config. de BD por aplicación
      • Copiar desde:
        • Aplicacioncap 7bibliotecaconfigdb_config.php
      •  
      • Hacia:
        • C:wampwwwyuppappsbibliotecaconfig
      •  
      • Explicación
      •  
      • Intentemos regenerar las tablas
        • Debemos crear la base de datos previamente 
    • Cap 7: Script de arranque
      • Copiar desde:
      • Aplicacioncap 7bibliotecabootstrapapps.biblioteca.bootstrap.Bootstrap.script.php
      •  
      • Hacia:
      • C:wampwwwyuppappsbibliotecabootstrap
      •  
      • Explicación del código
      •  
      • Ejecutemos el script de arranque!
        • ¿Vemos el contenido en la base?
    • Cap 8.1 Relaciones hasOne
      • Nuevo:
        • Model:
          • Clase Autor
          • Libro hasOne Autor
        • Bootstrap:
          • Ahora crea autores (ejecutar antes que tests)
        • Test:
          • 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
    • 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)
          • 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
    • Cap 8.2 Relaciones hasMany
      • Nuevo:
        • Model:
          •   Libro tiene varios coautores
        •   Test: (veamos el c ódigo)
          • crea un libro y le asocia autor y 2 coautores
          • 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
      •  
    • Cap 8.4 Verificando restricciones
      • Nuevo:
        • Model: (veamos el código!)
          • Restricción en el nombre del autor
          • Restricción en el número de páginas del libro 
        • Tests:
          • 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
      •  
    • Cap 8.6 Salvar en cascada: belongsTo
      • Reglas:
        • A(*)->(1)B: Yupp no sabe cual lado es el fuerte, necesita belongsTo explícito
        • A(1)<->(1)B: Yupp no sabe cual es el lado fuerte, necesita belongsTo explícito
        • A(1)->(*)B: Yupp considera que B belongsTo A
        • A(1)<->(*)B: Yupp considera que B belongsTo A
        • A(*)->(*)B: Yupp considera que B belongsTo A
        • 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).
    • Cap 8.6 Salvar en cascada: belongsTo
      • Nuevo:
        • Modelo:
          • Autor belongsTo Libro
          • Explício porque es Libro(*)->(1)Autor
        • Tests:
          • 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.
    • Cap 9: Controladores
      • Nuevo:
        •   Acciones en LibroController (veamos el código!)
          • redirect en acción &quot;index&quot;
          • generación de JSON
          • generación de XML
        • Bootstrap
          • 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
    • Cap 9: Controladores
      • Prueba 1: redirección
        • Acción index del controlador LibroController redirige a &quot;list&quot;
        • 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!
    • 10. Vistas
      • Nuevo:
        • Vistas:
          • views/libro/list.view.php
          • views/libro/details.template.php
        • Controladores y acciones:
          • Acción &quot;list&quot; implementada en LibroController
          • 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
    • Conclusiones
      • Múltiples usuarios:
    • Conclusiones
      • Agilidad:
        • Quitar tareas tediosas y repetitivas
        • Subir el nivel del desarrollo
          • Programar el modelo de objetos, sin necesidad de diseñar el modelo de bases de datos
          • Poco o nada de programar y mantener SQL
        • Programación estandarizada
          • Estructuras y convenciones conocidas y predecibles
    • Conclusiones
      • Agilidad:
        • Pequeña curva de aprendizaje
          • Una vez superada, se saca jugo a las convenciones
          • La performance de programación aumenta
          • Rápido prototipado: &quot;algo para mostrarle al cliente&quot;
          • 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
      •  
    • ¿Cómo seguir?
      • Documentación
      • http://www.simplewebportal.net/yupp_framework_php_doc
      • Grupo
      • http://groups.google.com/group/yuppframeworkphp
      • Blog
      • http://yuppframework.blogspot.com
      •  
      • Sitio en Google Code
      • http://code.google.com/p/yupp
      • Código fuente (SVN de desarrollo)
      • http://yupp.googlecode.com/svn/trunk/YuppPHPFramework/
      • Bugs
      • http://code.google.com/p/yupp/issues/list
    • ¡Gracias! Pablo Pazos Gutiérrez [email_address]