Symfony2: Framework para PHP5

4,776 views

Published on

Symfony2: Framework para PHP5

Published in: Real Estate
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

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

No notes for slide

Symfony2: Framework para PHP5

  1. 1. Symfony2 Framework para PHP5Raúl Fraile Beneyto @raulfraile // #symfonyproweb
  2. 2. #symfonyproweb Symfony2: Framework para PHP5Índice ✔ ¿Qué es un framework y por qué usarlo? ✔ Frameworks PHP ✔ ¿Por qué elegir Symfony? ✔ Primeros pasos ✔ Enlaces de interés ✔ PreguntasRaúl Fraile Beneyto
  3. 3. #symfonyproweb Symfony2: Framework para PHP5¿Qué es un framework y por qué usarlo? ✔ Organización del proyecto ✔ Estructura de archivos y carpetas ✔ Estructura lógica (namespaces) ✔ Estilo de programación Ventaja: Si una nueva persona se une al proyecto, puede estar trabajando en él en muy poco tiempo.Raúl Fraile Beneyto
  4. 4. #symfonyproweb Symfony2: Framework para PHP5¿Qué es un framework y por qué usarlo? ✔ Modelo Vista Controlador integrado ✔ Separación de la lógica de negocio y la presentación de la información. ✔ Varios entornos (desarrollo, test y producción). Ventaja: Facilidad para repartir tareas. Por ejemplo, los diseñadores sólamente tocarían las vistas.Raúl Fraile Beneyto
  5. 5. #symfonyproweb Symfony2: Framework para PHP5¿Qué es un framework y por qué usarlo? ✔ Modelo Vista Controlador integradoRaúl Fraile Beneyto
  6. 6. #symfonyproweb Symfony2: Framework para PHP5¿Qué es un framework y por qué usarlo? ✔ Bases de datos ✔ Independencia del tipo de base de datos ✔ Mapeado en clases (entidades) del esquema relacional. ✔ Fixtures con datos de prueba. ✔ Optimización de consultas para el SGBD utilizado.Raúl Fraile Beneyto
  7. 7. #symfonyproweb Symfony2: Framework para PHP5¿Qué es un framework y por qué usarlo? ✔ Detección de bugs ✔ Nos proporciona más información de la pila de errores o excepciones. ✔ Sabemos exactamente si es un error del modelo (base de datos), de la vista o del controlador. ✔ Al escribir menos código hay menos posibilidades de generar nuevos bugs.Raúl Fraile Beneyto
  8. 8. #symfonyproweb Symfony2: Framework para PHP5¿Qué es un framework y por qué usarlo? ✔ Publicación de la aplicación ✔ Si proporciona algún método para publicar la aplicación en producción, evitamos olvidos al subir archivos o hacerlo en orden incorrecto. ✔ Herramientas como Ant o Phing ya hacen esa labor sin necesidad de un framework.Raúl Fraile Beneyto
  9. 9. #symfonyproweb Symfony2: Framework para PHP5¿Qué es un framework y por qué usarlo? ✔ Formularios ✔ Generación automática de formularios a partir del modelo. ✔ Validaciones y tipos de datos predefinidos (fechas, emails, URLs...).Raúl Fraile Beneyto
  10. 10. #symfonyproweb Symfony2: Framework para PHP5¿Qué es un framework y por qué usarlo? ✔ Seguridad ✔ Seguridad integrada ante ataques XSS (Cross-site scripting), CSRF (Cross Site Request Forgery), SQL Injection...Raúl Fraile Beneyto
  11. 11. #symfonyproweb Symfony2: Framework para PHP5¿Qué es un framework y por qué usarlo? ✔ Otras ventajas ✔ Tests integrados ✔ Helpers ✔ Caché ✔ Plugins ✔ Posibilidad de extenderlo y adaptarlo a tus necesidades.Raúl Fraile Beneyto
  12. 12. #symfonyproweb Symfony2: Framework para PHP5¿Qué es un framework y por qué usarlo?Raúl Fraile Beneyto
  13. 13. #symfonyproweb Symfony2: Framework para PHP5¿Qué es un framework y por qué usarlo? No reinventes la ruedaRaúl Fraile Beneyto
  14. 14. #symfonyproweb Symfony2: Framework para PHP5¿Qué es un framework y por qué usarlo? ✔ También tiene algunas desventajas: ✔ Te puede llegar a limitar en desarrollos algo “especiales”. ✔ Añade una nueva capa, lo que puede suponer un deterioro del rendimiento. ● Si no lo dominas en profundidad, pueden llegar a ser frustrantes.Raúl Fraile Beneyto
  15. 15. #symfonyproweb Symfony2: Framework para PHP5¿Qué es un framework y por qué usarlo? ✔ En resumen: te hace la vida (un poco) más facilRaúl Fraile Beneyto
  16. 16. #symfonyproweb Symfony2: Framework para PHP5Frameworks PHPRaúl Fraile Beneyto
  17. 17. #symfonyproweb Symfony2: Framework para PHP5Frameworks PHP ✔ Intentan suplir algunas de las carencias de PHP => organización, separación de lógica y presentación... ✔ Añadir seguridad. PHP, al ser tan “sencillo”, ha permitido que casi cualquiera haga aplicaciones web, muchas de ellas inseguras.Raúl Fraile Beneyto
  18. 18. #symfonyproweb Symfony2: Framework para PHP5¿Por qué elegir Symfony? ¿Y por qué elegir...? ● Zend Framework ● CakePHP ● Codeigniter ● Otro Lo mejor si tienes tiempo: probar todos los que puedasRaúl Fraile Beneyto
  19. 19. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Framework para PHP creado por Fabien Potencier (Sensio Labs). ✔ Open-source. ✔ Comunidad muy importante. ✔ Excelente documentación y en diferentes idiomas (en versiones estables). ✔ Basado en buenas prácticas.Raúl Fraile Beneyto
  20. 20. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ La versión 1.0 salió en Enero de 2007 y requería PHP 5.0 + (a diferencia del resto de frameworks). ✔ La última versión estable es la 1.4, que salió en Noviembre de 2009 y tendrá soporte hasta Noviembre 2012. ✔ La versión 2 se ha reescrito desde cero.Raúl Fraile Beneyto
  21. 21. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Actualmente se encuentra en la versión beta : 2.0.0BETA1 ✔ De aquí a la versión final habrán muy pocos cambios, se centrarán en resolución de bugs y acortar algunos métodos.Raúl Fraile Beneyto
  22. 22. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Características principales: ✔ Fácil de aprender. ✔ Muy flexible con la introducción de bundles (framework de frameworks). ✔ Completo. ✔ Rápido. ✔ Utilización de estándares (PHPUnit, Zend_Cache, Zend_Logger, PHP 5.3 autoload, Java JSR303).Raúl Fraile Beneyto
  23. 23. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Funcionamiento básicoRaúl Fraile Beneyto
  24. 24. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Bundles ✔ En Symfony2 TODO son bundles, incluido el propio framework. ✔ Un bundle es un “paquete” con una estructura definida, que puede contener cualquier cosa e implementa una funcionalidad. ✔ Permite utilizar bundles de terceros y compartir tus propios bundles entre distintos proyectos.Raúl Fraile Beneyto
  25. 25. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Bundles ✔ Algunos de los bundles incluidos en la Standard Edition: ✔ Assetic: gestor de “assets” para PHP 5.3 – Doctrine: ORM (object relational mapping) – Monolog: sistema de logs – SwiftMailer: envío de mails – Twig: lenguage de plantillasRaúl Fraile Beneyto
  26. 26. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ PHP 5.3 ✔ Symfony2 NO FUNCIONA con versiones inferiores a PHP 5.3.2. ✔ Esta versión de PHP introdujo mejoras importantes en el rendimiento (hasta un 20% de mejora) y la inclusión de namespaces.Raúl Fraile Beneyto
  27. 27. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Templates ✔ Se utiliza el patrón “decorator”. ✔ En Symfony se pueden crear las vistas en PHP o en Twig. http://www.twig-project.org/Raúl Fraile Beneyto
  28. 28. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Templates: Twig ✔ Lenguage pensado para que gente sin conocimientos de programación (p.ej. Maquetadores), puedan utilizar los parámetros que se le pasan a la vista de una manera más sencilla. ✔ La primera vez que se ejecuta se cachea en PHP puro, por lo que su rendimiento es bueno. ✔ Dispone de filtros.Raúl Fraile Beneyto
  29. 29. #symfonyproweb Symfony2: Framework para PHP5Symfony <!DOCTYPE html> <html> <head> ✔ Templates: Twig <title>Post: <?php echo $titulo; ?></title> </head> <body> <h1><?php echo $titulo; ?></h1> <!DOCTYPE html> <div><?php echo $contenido; ?></div> <html> <ul> <head> <?php foreach ($comentarios as $item){ ?> <li><?php echo $comentario.autor; ?></li> <title>Post: {{ titulo }}</title> <?php } ?> </head> </ul> <body> </body> <h1>{{ titulo }}</h1> </html> <div>{{ contenido }}</div> <ul> {% for item in comentarios %} <li>{{ comentario.autor }}: {{ comentario.texto }}</li> {% endfor %} </ul> </body> </html>Raúl Fraile Beneyto
  30. 30. #symfonyproweb Symfony2: Framework para PHP5Symfony <!DOCTYPE html> <html> <head> <title>Post: <?php echo $titulo; ?></title> ✔ Templates: Twig </head> <body> <h1><?php echo strtoupper($titulo); ?></h1> <!DOCTYPE html> <html> <h2>Fecha: <?php echo date(d/m/Y, $fecha); ? <head> ></h2> <title>Post: {{ titulo }}</title> <div><?php echo $contenido; ?></div> </head> <body> </body> </html> <h1>{{ titulo | upper }}</h1> <h2>Fecha: {{ fecha | date("d/m/Y") }}</h2> <div>{{ contenido }}</div> </body> </html>Raúl Fraile Beneyto
  31. 31. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Templates: Twig ✔ Algunos filtros que se pueden utilizar: ✔ date, replace, url_encode, json_encode, title, capitalize, upper, lower, striptags, join, reverse, length... ✔ Funciones integradas ✔ divisibleby, none, even, odd, defined, empty... ✔ Puedes crear tus propias extensiones.Raúl Fraile Beneyto
  32. 32. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Templates: Twig ✔ Se puede integrar en algunos IDEs ✔ PHPStorm 2.1+ tiene soporte nativo. – Netbeans: https://github.com/blogsh/Twig-netbeans – Vim: http://jinja.pocoo.org/2/documentation/integration – Textmate: https://github.com/Anomareh/PHP-Twig.tmbundleRaúl Fraile Beneyto
  33. 33. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Templates: Twig ✔ Utilizando el patrón “decorator”, el template “padre” deja huecos para que puedan ser rellenados por el template “hijo”. Padre Hijo {% block title %} {% extends "padre.html" %} Blog Proweb {% endblock %} {% block title %}Blog Proweb: Contacto{% endblock %}Raúl Fraile Beneyto
  34. 34. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Configuración ✔ La configuración global de la aplicación se encuentra en /app/config/. ✔ Symfony permite configuración en YAML, XML, PHP o Annotations. ✔ También permite una configuración distinta por cada entorno de ejecución (dev, prod, test).Raúl Fraile Beneyto
  35. 35. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Consola ✔ Symfony dispone de una consola de comandos para poder realizar algunas de las tareas más comunes: ✔ Crear bundles ✔ Limpiar caché / “Calentar” caché ✔ Generar las entidades de la BD ✔ Ejecutar una consulta SQL / DQL ✔ ...Raúl Fraile Beneyto
  36. 36. #symfonyproweb Symfony2: Framework para PHP5SymfonyRaúl Fraile Beneyto
  37. 37. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Base de datos ✔ Se utiliza un ORM: Doctrine o Propel. ● Doctrine mapea la base de datos relacional en clases (entidades). Incluso crea los getters/setters. doctrine:mapping:import doctrine:generate:entitiesRaúl Fraile Beneyto
  38. 38. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Base de datos: persistencia namespace ProwebBlogBundleController; use ProwebBlogBundleEntityPost; class PostController extends Controller { public function createAction() { $post = new Post(); $post->setTitle(Charla de Symfony); $post->setContent(<p>La charla sobre Symfony será el 13/05.</p>); $post->setSlug(charla-symfony); $em = $this->get(doctrine.orm.entity_manager); $em->persist($post); $em->flush(); } ...Raúl Fraile Beneyto
  39. 39. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Base de datos: consultas public function showAction($id) { $em = $this->get(doctrine.orm.entity_manager); $qb = $em->createQueryBuilder(); $qb->select(p) ->from(ProwebBlogBundle:Post,p) ->where(p.id = ?2); $query = $qb->getQuery(); $query->setParameter(1, $id); $result = $query->getSingleResult(); ...Raúl Fraile Beneyto
  40. 40. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Routing ✔ Se pueden definir las rutas en YAML, XML, PHP o Annotations. /** * @extra:Route("/post/{slug}-{id}", name="_post_view") * @extra:Template() */ public function showAction($slug, $id) { [...] return array(post=>$post); }Raúl Fraile Beneyto
  41. 41. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Formularios ✔ Se han simplificado los formularios en esta versión de Symfony. ✔ Pueden utilizar el modelo para construir los formularios, incluso adivinando los tipos de campos y validaciones.Raúl Fraile Beneyto
  42. 42. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Formularios: Controlador $product = new Product(); $product->name = Test product; $product->setPrice(50.00); $form = $this->get(form.factory) ->createBuilder(form, $product) ->add(name, text) ->add(price, money, array(currency => USD)) ->getForm(); return $this->render(AcmeStoreBundle:Default:index.html.twig, array( form => $form->createView(), ));Raúl Fraile Beneyto
  43. 43. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Formularios: Vista <form action="{{ path(store_product) }}" method="post" {{ form_enctype(form) }}> {{ form_widget(form) }} <input type="submit" /> </form>Raúl Fraile Beneyto
  44. 44. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Formularios: Recoger datos $request = $this->get(request); if ($request->getMethod() == POST) { $form->bindRequest($request); if ($form->isValid()) { // se guardaría en base de datos return $this->redirect($this->generateUrl(store_product_success)); } }Raúl Fraile Beneyto
  45. 45. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Formularios: campos predefinidos ✔ birthday, checkbox, choice, collection, country, csrf, datetime, date, entity, file, form, hidden, integer, language, money, number, password, percent, radio, repeated, textarea, text, time, timezone, url...Raúl Fraile Beneyto
  46. 46. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Admin Generator ✔ En las versiones anteriores de Symfony, había un generador de “backend”, que permitía crear paneles de administración en minutos, basándose en la información de la base de datos y muy configurable. ✔ En Symfony2 desaparece como parte del framework => AdminBundle.Raúl Fraile Beneyto
  47. 47. #symfonyproweb Symfony2: Framework para PHP5Symfony @s_bergmann ✔ Tests ● Symfony2 utiliza PHPUnit 3.5.11 (en esta versión abandonan Lime). ● Cada bundle puede tener una carpeta Tests con todos los tests unitarios. Está configurado para que busque los tests en estas carpetas al hacer: phpunit -c app/Raúl Fraile Beneyto
  48. 48. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Debug ● Symfony2 proporciona una barra de herramientas con información muy útil: entorno de ejecución en el que nos encontramos, controlador que se ha ejecutado, logs, milisegundos, kb, consultas a la base de datos...Raúl Fraile Beneyto
  49. 49. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Debug ● También disponemos de un Profiler que almacena mucha información sobre la petición. Es una ampliación de la barra de herramientas. ● Genera un código único por cada petición, por lo que se pueden recuperar posteriormente.Raúl Fraile Beneyto
  50. 50. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Debug: ProfilerRaúl Fraile Beneyto
  51. 51. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Assetic ✔ Gestor de assets (archivos JS, CSS, imágenes...) para PHP 5.3. ✔ Viene incluido como Bundle en Symfony. ✔ Permite utilizar herramientas externas (la mayoría escritas en otros lenguajes como Java o C) para combinar varios archivos JS o CSS, hacer minify, optimizar imágenes, utilizar preprocesadores CSS, optimización de código JS...Raúl Fraile Beneyto
  52. 52. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Assetic: Algunas herramientas que acepta ✔ Coffee Script: lenguaje más simple que JS. ✔ LESS: mejora CSS con variables, funciones... ✔ Google Closure Compiler: optimiza código JS. ✔ JSMin: minify de código JS. ✔ YUI Compressor: minify de JS y CSS. ✔ OptiPNG: optimización de imágenes PNG.Raúl Fraile Beneyto
  53. 53. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Assetic: Ejemplo con YUI Compressor $core = new AssetCollection( array( new FileAsset(/js/jquery.js), new GlobalAsset(/js/blog/*.js); ), array( new YuiCompressorJsFilter(/js/yui.jar); ) ); $core->load(); header(Content-type: text/javascript); echo $core->dump();Raúl Fraile Beneyto
  54. 54. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Rendimiento ✔ Según algunos benchmarks, Symfony2 es... 2x más rápido que symfony 1.4.2 3.5x más rápido que Zend 1.10 5.5 más rápido que CakePHP ✔ Fabien Potencier define a Symfony2 como “Fast as Hell”Raúl Fraile Beneyto
  55. 55. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ RendimientoRaúl Fraile Beneyto
  56. 56. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Rendimiento: ¿Cómo lo consigue? ✔ Utiliza PHP 5.3.2 ✔ Lazy-loading ✔ Caché interna => archivos de configuración, templates... todo se cachea. ✔ HTTP CacheRaúl Fraile Beneyto
  57. 57. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Rendimiento: HTTP Cache ✔ Se basa en la especificación HTTP/1.1 y el uso de ESI (Edge Side Includes), que permite cachear “trozos” de una misma página en tiempos distintos. ✔ Es necesario disponer de un proxy caché (p.ej. Varnish o Squid). Symfony lo lleva integrado.Raúl Fraile Beneyto
  58. 58. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Rendimiento: HTTP CacheRaúl Fraile Beneyto
  59. 59. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Rendimiento: HTTP CacheRaúl Fraile Beneyto
  60. 60. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Rendimiento: HTTP CacheRaúl Fraile Beneyto
  61. 61. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Rendimiento: HTTP Cache 1 60 10Raúl Fraile Beneyto
  62. 62. #symfonyproweb Symfony2: Framework para PHP5Symfony ✔ Rendimiento: HTTP Cache ✔ Con Symfony2 podemos simular la comunicación “proxy cache <=> http server”, utilizando ESI. $this->render(NoticiasBundle:Default:destacadas.html.twig, array(noticias=>$noticias), array(standalone => true) ); URL del fragmento <esi:include src="http://..." />Raúl Fraile Beneyto
  63. 63. #symfonyproweb Symfony2: Framework para PHP5Primeros pasos ✔ Hay que tener en cuenta Symfony se encuentra actualmente en fase beta, pueden cambiar algunas cosas, hay bugs, la documentación es incompleta (y errónea en algunos casos)...Raúl Fraile Beneyto
  64. 64. #symfonyproweb Symfony2: Framework para PHP5Primeros pasos: Blog del curso Proweb ✔ Descargar “Symfony Standard Edition” de http://symfony.com/download. Symfony va a disponer de “distribuciones” (siguiendo el estilo de Linux). Podrás descargar todo el framework, componentes sueltos o distribuciones preparadas para determinados tipos de proyectos. La Standard Edition ofrece una configuración básica por defecto y un bundle de prueba.Raúl Fraile Beneyto
  65. 65. #symfonyproweb Symfony2: Framework para PHP5Primeros pasos: Blog del curso Proweb ✔ Configurar Apache para que apunte a la carpeta “web”. VirtualHost para acceder más rápidamente: http://blog_proweb/[...] ✔ Para comprobar que todo está correcto accedemos a: http://blog_proweb/app_dev.php/Raúl Fraile Beneyto
  66. 66. #symfonyproweb Symfony2: Framework para PHP5Primeros pasos: Blog del curso ProwebRaúl Fraile Beneyto
  67. 67. #symfonyproweb Symfony2: Framework para PHP5Primeros pasos: Blog del curso Proweb ✔ Crear bundle: ✔ Se carga el namespace en /app/autoload.php y se registra en /app/AppKernel.php:Raúl Fraile Beneyto
  68. 68. #symfonyproweb Symfony2: Framework para PHP5Primeros pasos: Blog del curso Proweb ✔ La configuración de la base de datos podemos hacerla manualmente (editando el archivo /app/config/parameters.ini) o de forma guiada: http://blog_proweb/app_dev.php/_configurat or/ Servidor: localhost Usuario: user_blog_proweb Clave: 123456 Base de datos: blog_prowebRaúl Fraile Beneyto
  69. 69. #symfonyproweb Symfony2: Framework para PHP5Primeros pasos: Blog del curso ProwebRaúl Fraile Beneyto
  70. 70. #symfonyproweb Symfony2: Framework para PHP5Primeros pasos: Blog del curso Proweb ✔ Mapear BD en clasesRaúl Fraile Beneyto
  71. 71. #symfonyproweb Symfony2: Framework para PHP5Enlaces de interés symfony.comRaúl Fraile Beneyto
  72. 72. #symfonyproweb Symfony2: Framework para PHP5Enlaces de interés symfony.com/blogRaúl Fraile Beneyto
  73. 73. #symfonyproweb Symfony2: Framework para PHP5Enlaces de interés symfony.esRaúl Fraile Beneyto
  74. 74. #symfonyproweb Symfony2: Framework para PHP5Enlaces de interés symfony2bundles.orgRaúl Fraile Beneyto
  75. 75. #symfonyproweb Symfony2: Framework para PHP5Enlaces de interés groups.google.com/group/symfony-usersRaúl Fraile Beneyto
  76. 76. #symfonyproweb Symfony2: Framework para PHP5Enlaces de interés silex-project.orgRaúl Fraile Beneyto
  77. 77. #symfonyproweb Symfony2: Framework para PHP5Enlaces de interés ● Twitter: ● @fabpot: Creador de Symfony ● @javiereguiluz: Blog de symfony.com y admin de symfony.es ● @Kriswallsmith: Creador de Assetic ● @desymfony: Jornadas Symfony en Castellón (1, 2 y 3 de julio)Raúl Fraile Beneyto
  78. 78. #symfonyproweb Symfony2: Framework para PHP5¡Muchas gracias! ¿Preguntas? Seguro que sí... ;)Raúl Fraile Beneyto
  79. 79. #symfonyproweb Symfony2: Framework para PHP5Antes de acabar... http://twtpoll.com/aazwaiRaúl Fraile Beneyto

×