Advertisement

Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP

Jun. 11, 2015
Advertisement

More Related Content

Advertisement
Advertisement

Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP

  1. Introducción a Silex Aprendiendo a hacer las cosas bien con PHP Daniel Primo @delineas www.danielprimo.es
  2. Vamos a aprender PHP
  3. Vamos a aprender PHP
  4. ¿Quién soy? Daniel Primo @delineas danielprimo.es “Constructor freelance de mundo online”
  5. No soy un experto. Sólo os cuento mi experiencia.
  6. ¿Soy programdor?
  7. Soy programador constructor
  8. El día que todo cambió 9 de Noviembre de 2012
  9. “Exorcismo de codigo en PHP” Charla de Agilecyl con Pepe Doval Si no aspiras a mejorar en tu trabajo, ¿por qué aspiras a cobrar por ello?
  10. Soy programador
  11. Y a medio camino...
  12. ¿Qué es el sílex? El sílex (SiO2), se usó en la Edad de Piedra para la elaboración de herramientas cortantes, por su capacidad de romperse en lascas (fractura concoidea, láminas rectas con ligeras curvas) de bordes muy agudos. También fue usado para encender fuego por su capacidad de crear chispas al chocarse con otra pieza de igual o mayor dureza. Generalmente se halla asociado con la caliza, rocas sedimentarias formadas por carbonato de calcio, depositadas en aguas profundas. Típicamente se presenta en forma de nódulos entre estratos de caliza. Fuente: Wikipedia
  13. ¿Qué es Silex? Es un microframework de PHP. Construido a hombros de Symfony2 y Pimple e inspirado en Sinatra (ruby). http://silex.sensiolabs.org/
  14. ¿Y por qué es un microframework? ● Conciso: API fácil y divertida de manejar ● Extensible: A partir del micro service-container Pimple es sencillo incluir librerías de terceros ● Testable: Silex utiliza el componente HttpKernel de Symfony2 lo que permite abstraer petición y respuesta, lo que permite testearlo con facilidad
  15. Request Routing Controller Response 1 2 3 4 Request – Reponse
  16. Hola Mundo!
  17. En el navegador localhost:8888/hello/chicken Request 1 Genera una petición GET /hello/chicken
  18. Captura la petición Parámetro name reconocido Routing 2
  19. Controlador Ejecuta la lógica (función anónima) Controller 3
  20. Respuesta Salida por pantalla Response 4
  21. Raíz de la web Autocarga de clases Creación de la aplicación Ejecución de la aplicación Herencia de variable: No es parámetro, es el contenedor de todo PHP 5.3 Algunas cosas más
  22. Instalación www.getcomposer.org
  23. Instalación básica ● Descarga http://silex.sensiolabs.org/download ● Composer → creamos fichero composer.json composer install
  24. Instalación “potencier” ● Descarga https://github.com/silexphp/Silex-Skeleton ● Composer composer create-project fabpot/silex-skeleton myapp ~2.0@dev ● Código más ordenado ● Librerías precargadas ● Código de ejemplo
  25. Skeleton
  26. Skeleton ● config: Aquí estará la configuración específica de cada entorno (desarrollo, producción). ● var/logs: Ficheros de log. ● var/cache: Directorio donde se almacenará la caché de Twig y el Profiler ● src: Código de la aplicación. – app.php → carga de providers – controllers.php → definición de rutas/controladores ● templates: plantillas de Twig. ● vendor: librerías de terceros ● web: directorio accesible vía web, estarán los controladores frontales y los assets. – index.php → producción – index_dev.php → desarrollo
  27. Arrancamos el servidor ● Composer (definido en composer.json) composer run ● Servidor nativo de PHP 5.4 php -S localhost:8888 -t web web/index_dev.php php -S localhost:8888 -t web web/index.php ● Servidor Apache configurado
  28. ¿Cuándo lo uso?
  29. Lo bueno ● En pocos minutos tienes resultados ● Es fácil hacerlo crecer ● Ordenado, sino se hace muy grande ● Toda la potencia de symfony ● Se pueden ejecutar tests ● Estructura flexible ● Bien documentado
  30. Lo malo ● Si crece mucho puedes caer en el caos ● Pretender llegar al infinito (infinito = symfony) ● No es igual de bueno para proyectos grandes ● Errores por exceso de magia (o por desconocimiento del truco) ● Debes tener clara la estructura de tu código
  31. Caso de estudio ● Primera página de reclamo ● Segunda página con formulario ● Formulario necesita validaciones específicas ● Al enviar el formulario se envía un correo con datos y se guarda en base de datos ● Intregación con TPV Sermepa ● Páginas estáticas de aviso legal, identidad...
  32. Recordemos nuestra app
  33. Modificadores de ruta
  34. Proveedores (Providers)
  35. Inyección de dependencias La inyección de dependencias es un patrón de diseño en el que las dependencias se pasan directamente a los servicios, en vez de crearlas dentro de los propios servicios o en vez de utilizar variables globales. Si se utiliza bien, la inyección de dependencias hace que el código resultante esté más desacoplado, sea más flexible y fácil de testear y se pueda reutilizar más fácilmente.
  36. Pimple
  37. ¡No solo eso! También es un contenedor de servicios
  38. $app ● $app es un contenedor de servicios extensión de Pimple ● ● ● Asignar un “closure” a una clave del array del contenedor ● “share” indica que es compartido para toda la aplicación (puede usarse una y otra vez)
  39. Twig: plantillas #app.php #controllers.php #hello.twig
  40. Form: formularios (I) Servicio de creación de forms Request, para saber lo que enviamos
  41. Form: formularios (II) Si ha sido enviado procesamos Si es válido continuamos Redireccionamos para acabar El controlador devuelve la plantilla con el formulario pintado
  42. Form: formularios (III)
  43. Form: formularios (IV) Validaciones
  44. Doctrine: base de datos
  45. API Y ya está...
  46. Y más ● http_cache, integra el proxy inverso de Symfony2 ● monolog, proporciona un sistema de logs ● security, se encarga de gestionar la autenticación y la autorización de acceso ● serializer, proporciona un servicio para serializar objetos. ● validator, permite validar información ● session, almacenar información de forma persistente entre diferentes peticiones. ● swiftmailer, permite enviar emails utilizando la librería Swift Mailer. ● translation, proporciona un servicio que facilita la traducción de tu aplicación a diferentes idiomas. ● url_generator, proporciona un servicio para poder generar URL a partir del nombre de la ruta.
  47. - ¿Perdona? - Si - ¿No dijiste que íbamos a hacer las cosas bien? - Si, ¿qué pasa? - Cuantas líneas tiene esa cosa todas juntas... - Ehhhh...
  48. Ordena tu código ● Estructura en carpetas: views, form... ● Estructura el enrutado / controlador – Controladores en clases PHP normales – Controladores como ControllerProviders – Providers propios ● Otras ayudas – Configuración en ficheros YAML (rutas, opciones) ● http://librosweb.es/tutorial/como-organizar-bien-un-proyecto-silex/
  49. Controladores en clases
  50. Controladores en clases
  51. ControllerProvider
  52. Tests ● PHPUnit ● WebTestCase para tests funcionales ● Crawler como symfony :) ● http://librosweb.es/libro/silex/capitulo_7.html
  53. Nuestro provider Protegido Parámetro por defecto Crea el servicio y lo registra Configura la aplicación antes de la petición
  54. Nuestro provider Registro en la applicación
  55. Show me the code https://github.com/delineas/IntroSilex
  56. Muchas Gracias @delineas danielprimo.es dani@danielprimo.es
Advertisement