9 788426 721600
Programación PHP Profesional con Slim, Paris y Twig
Programación PHP Profesional con Slim, Paris y Twig Joseluis Laso
Programación PHP Profesional con Slim, Paris y Twig
Primera edición, 2014
© 2014 Joseluis Laso
© MARCOMBO, S.A. 2014 Gran Vía de les Corts Catalanes, 594 08007 Barcelona www.marcombo.com «Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta obra solo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley. Diríjase a CEDRO (Centro Español de Derechos Reprográficos, www.cedro.org) si necesita fotocopiar o escanear algún fragmento de esta obra».
ISBN: 978-84-267-2160-0 DL: B-15822-2014 Impreso en Printed in Spain
Dedico este libro con todo mi cariño a mis seres queridos y a todas aquellas personas que me han ayudado a materializar este proyecto.
Sobre mí Nací en Valencia aunque de ascendencia castellana. Empecé mis primeros pinitos en la informática con una calculadora SHARP PC-1500A que consiguió mi padre al adquirir un equipo informático a la empresa INGELMO sobre los años ochenta, equipos que por aquella época costaban alrededor de un millón de pesetas: una CPU Z80 con 64 Kb de RAM; dos disqueteras de 5 1/4” de 360 kB: una para el programa y otra para datos; y una impresora matricial para confeccionar los documentos de reparto y facturas. El programa: un desarrollo a medida (según lo vendían) costaba aproximadamente lo mismo que el hardware (¡Qué tiempos aquellos!). Cuando exprimí la calculadora al máximo me pasé directamente a programar «el bicho» que he descrito. No he parado desde entonces, pasando por aplicaciones de escritorio hechas en Turbo Pascal, Delphi, Access, Velneo hasta por fin aplicaciones web desarrolladas en PHP y MySQL. De la mano de Symfony 1.4 entré por la puerta grande en la programación orientada a objetos, aunque pronto se nubló mi éxtasis al tener que desarrollar plugins y themes para Wordpress, que, aunque teniendo mérito como desarrollo comunitario, es lo que en nuestro mundillo se conoce como código espagueti. Esta vasta experiencia y mis muchos deseos de aprender, unidos a las innumerables charlas a las que he asistido sobre Symfony y las incontables entrevistas de trabajo que he protagonizado, en las que me han preguntado sobre patrones de diseño, programación en equipo, buenas prácticas, etc., me han motivado a contar mi experiencia a nivel de desarrollo en PHP para que aquellos que tengan interés en aprender a programar para un mundo real encuentren en este libro el apoyo técnico necesario para empezar esta andadura.
Índice de contenidos 1. Introducción .................................................................................................................... 1 Presentación ................................................................................................................................ 2 Composer ...................................................................................................................................... 2 Slim .................................................................................................................................................. 4 Entonces, ¿qué vamos a ver en este libro? ...................................................................... 5 Conclusión..................................................................................................................................... 6
Parte I: MVC 2. Patrón MVC ....................................................................................................................... 9 Introducción...............................................................................................................................10 ¿Por qué esta elección?..........................................................................................................11 Conclusión...................................................................................................................................13 3. El controlador: Slim .................................................................................................... 15 Introducción...............................................................................................................................16 ¿Cómo funciona? ......................................................................................................................17 ¿Qué hace Slim? ........................................................................................................................19 Declaración de rutas ...............................................................................................................20 ¿Atención duplicada? .............................................................................................................21 Conclusión...................................................................................................................................22 4. El modelo: IdiORM & Paris ....................................................................................... 23 ¿Qué es un ORM? ......................................................................................................................24 ¿Por qué un ORM?....................................................................................................................25 Métodos disponibles ..............................................................................................................30 Rizando el rizo ..........................................................................................................................32 Relaciones entre tablas .........................................................................................................33 Conclusión...................................................................................................................................35
5. La vista: Twig ................................................................................................................ 37 ¡Ay, la vista, la vista! ................................................................................................................38 Vamos por partes .....................................................................................................................39 ¿Qué es Twig? ............................................................................................................................41 ¿Cómo funciona? ......................................................................................................................42 Tipos de datos ...........................................................................................................................45 Toma de decisiones .................................................................................................................46 Iteraciones ..................................................................................................................................46 Funciones de Twig ...................................................................................................................48 Extender Twig con funciones propias.............................................................................49 Macros ..........................................................................................................................................49 Resumen ......................................................................................................................................52 Conclusión...................................................................................................................................59
Parte II: Herramientas 6. Composer ....................................................................................................................... 63 Introducción...............................................................................................................................64 Repositorios privados ............................................................................................................67 Conclusión...................................................................................................................................69 7. Git como SCM ................................................................................................................ 71 Introducción teórica ...............................................................................................................72 Explicación práctica ................................................................................................................73 Instalación...................................................................................................................................76 Comandos básicos: init y clone ..........................................................................................77 Funcionamiento en el día a día ..........................................................................................78 Ejemplos prácticos de uso....................................................................................................80 Buenas prácticas ......................................................................................................................88 Comandos más usados de git ..............................................................................................89 Rizando el rizo ..........................................................................................................................91 Conclusión...................................................................................................................................92
Parte III: MVC a fondo 8. Controller: Slim ............................................................................................................ 95 Introducción...............................................................................................................................96 Cómo implementar una ruta simple ................................................................................99 Personalizar errores en Slim............................................................................................ 102 Ganchos (Hooks).................................................................................................................... 106 Conclusión................................................................................................................................ 109 9. Vamos con el modelo................................................................................................111 Introducción............................................................................................................................ 112 Configurar la instancia........................................................................................................ 112 Recordando un poco ............................................................................................................ 112 Una consulta sencilla ........................................................................................................... 113 Una consulta completa ....................................................................................................... 113 Usando tablas de bases de datos diferentes .............................................................. 115 Extender IdiOrm&Paris...................................................................................................... 116 Diagrama de tablas de My-simple-web ......................................................................... 118 SluggableInterface ................................................................................................................ 124 Conclusión................................................................................................................................ 149 10. Añadiendo Twig ......................................................................................................143 Introducción............................................................................................................................ 144 Parte de administración de datos .................................................................................. 146 Conclusión................................................................................................................................ 157 11. Formularios ..............................................................................................................159 Introducción............................................................................................................................ 160 Formulario de contacto ...................................................................................................... 161 Formularios en el backend ................................................................................................ 166 Conclusión................................................................................................................................ 171 12. Validación ..................................................................................................................173 Introducción............................................................................................................................ 174
Extender BaseModel............................................................................................................ 174 ¿Cómo usar la validación? ................................................................................................. 177 SluggableInterface ................................................................................................................ 178 Conclusión................................................................................................................................ 181 13. i18n: Internacionalización ..................................................................................183 Introducción............................................................................................................................ 184 Sistema de trabajo ................................................................................................................ 184 Conclusión................................................................................................................................ 188 14. Agregando nuevos componentes.......................................................................189 Introducción............................................................................................................................ 190 Anotaciones para rutas ...................................................................................................... 190 EntityManager........................................................................................................................ 199 Paginación y búsqueda ....................................................................................................... 205 Conclusión................................................................................................................................ 217 15. Aplicación de ejemplo ...........................................................................................219 Presentación ........................................................................................................................... 220 ¿Cómo empezar? ................................................................................................................... 220 ¿Qué es un fork? .................................................................................................................... 222 Pull request.............................................................................................................................. 222 Conclusión................................................................................................................................ 226
Parte IV: Para subir nota 16. TDD..............................................................................................................................229 Presentación ........................................................................................................................... 230 ¿En qué consiste el TDD? ................................................................................................... 230 ¿Para qué sirven los test? .................................................................................................. 230 Ejemplo práctico ................................................................................................................... 234 Conclusión................................................................................................................................ 240 17. Caso práctico ............................................................................................................241 Presentación ........................................................................................................................... 242
E-commerce básico ............................................................................................................... 243 Manos a la obra ...................................................................................................................... 245 El reto ......................................................................................................................................... 256 Conclusión................................................................................................................................ 258
Índices
Convenciones He seguido las siguientes convenciones a la hora de escribir este libro para facilitar el seguimiento del código fuente de los ejemplos y su lectura en general: » Nombres de archivo en cursiva: index.php » URL y enlaces en gris y subrayados: http://www.joseluislaso.es » Contenido del los archivos en letra Andale Mono a 9:
» Salida del terminal en vídeo inverso con Courier a 11: mkdir prueba » Comando embebido en la línea en letra Andale Mono a 9: cd carpeta » Notas en el texto: Esto es importante, ¡Tenlo en cuenta! » Además utilizaré PSR0 a 2, por ello verás que no cierro nunca las etiquetas