Raúl Fraile Beneyto @raulfraile // #symfonyproweb Symfony2 Framework para PHP5
Raúl Fraile Beneyto Índice Symfony2: Framework para PHP5 #symfonyproweb <ul><li>¿Qué es un framework y por qué usarlo?
Frameworks PHP
¿Por qué elegir Symfony?
Primeros pasos
Enlaces de interés
Preguntas </li></ul>
Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Organizaci...
Estructura lógica (namespaces)
Estilo de programación </li></ul></ul>Ventaja: Si una nueva persona se une al proyecto,  puede estar trabajando en él en m...
Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Modelo Vis...
Varios entornos (desarrollo, test y producción). </li></ul></ul>Ventaja: Facilidad para repartir tareas. Por ejemplo, los ...
Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Modelo Vis...
Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Bases de d...
Mapeado en clases (entidades) del esquema relacional.
Fixtures con datos de prueba.
Optimización de consultas para el SGBD utilizado. </li></ul></ul>
Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Detección ...
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. </li></ul></ul>
Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Publicació...
Herramientas como Ant o Phing ya hacen esa labor sin necesidad de un framework. </li></ul></ul>
Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Formulario...
Validaciones y tipos de datos predefinidos (fechas, emails, URLs...). </li></ul></ul>
Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Seguridad ...
Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Otras vent...
Helpers
Caché
Plugins
Posibilidad de extenderlo y adaptarlo a tus necesidades. </li></ul></ul>
Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb
Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb No reinventes la r...
Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>También ti...
Añade una nueva capa, lo que puede suponer un deterioro del rendimiento. </li></ul></ul><ul><ul><li>Si no lo dominas en pr...
Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>En resumen...
Raúl Fraile Beneyto Frameworks PHP Symfony2: Framework para PHP5 #symfonyproweb
Raúl Fraile Beneyto Frameworks PHP Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Intentan suplir algunas de las car...
Añadir seguridad. PHP, al ser tan “sencillo”, ha permitido que casi cualquiera haga aplicaciones web, muchas de ellas inse...
Raúl Fraile Beneyto ¿Por qué elegir Symfony? Symfony2: Framework para PHP5 #symfonyproweb ¿Y por qué elegir...? <ul><li>Ze...
CakePHP
Codeigniter
Otro </li></ul>Lo mejor si tienes tiempo: probar todos los que puedas
Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Framework para PHP creado por Fabien Pote...
Open-source.
Comunidad muy importante.
Excelente documentación y en diferentes idiomas (en versiones estables).
Basado en buenas prácticas. </li></ul>
Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>La versión 1.0 salió en Enero de 2007 y r...
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. </li></ul>
Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Actualmente se encuentra en la versión be...
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. </li></ul>
Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Características principales: </li><ul><li...
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). </li></ul></ul>
Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Funcionamiento básico </li></ul>
Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Bundles </li><ul><li>En Symfony2 TODO son...
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. </li></ul></ul>
Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Bundles </li><ul><li>Algunos de los bundl...
Monolog: sistema de logs
SwiftMailer: envío de mails
Twig: lenguage de plantillas </li></ul></ul></ul>
Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>PHP 5.3 </li><ul><li>Symfony2 NO FUNCIONA...
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 Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Templates </li><ul><li>Se utiliza el patr...
En Symfony se pueden crear las vistas en PHP o en Twig. </li></ul></ul>http://www.twig-project.org/
Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Templates: Twig </li><ul><li>Lenguage pen...
La primera vez que se ejecuta se cachea en PHP puro, por lo que su rendimiento es bueno.
Dispone de filtros. </li></ul></ul>
Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Templates: Twig </li></ul><!DOCTYPE html>...
Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Templates: Twig </li></ul><!DOCTYPE html>...
Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Templates: Twig </li><ul><li>Algunos filt...
Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Templates: Twig </li><ul><li>Se puede int...
Vim:  http://jinja.pocoo.org/2/documentation/integration
Textmate:  https://github.com/Anomareh/PHP-Twig.tmbundle </li></ul></ul></ul>
Upcoming SlideShare
Loading in …5
×

Symfony2: Framework para PHP5

11,474 views

Published on

Presentación utilizada para la charla sobre Symfony2 en el curso de Experto Universitario en Programación Web 2.0 (http://www.proweb.ua.es/)

Published in: Technology
3 Comments
6 Likes
Statistics
Notes
  • Muchas gracias por subir la presentación, ha sido muy instructiva.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Estoy preparando un proyecto de e-learning que se desarrollará con Symfony2 y os agradecería vuestro voto para poder financiarlo. Para votar: http://unclickuneuro.yuzz.org/tuweb_v4s2xd.html
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Presentación de la charla sobre Symfony2 para el título de Experto Universitario en Programación Web (http://www.proweb.ua.es/)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
11,474
On SlideShare
0
From Embeds
0
Number of Embeds
1,147
Actions
Shares
0
Downloads
313
Comments
3
Likes
6
Embeds 0
No embeds

No notes for slide

Symfony2: Framework para PHP5

  1. 1. Raúl Fraile Beneyto @raulfraile // #symfonyproweb Symfony2 Framework para PHP5
  2. 2. Raúl Fraile Beneyto Índice Symfony2: Framework para PHP5 #symfonyproweb <ul><li>¿Qué es un framework y por qué usarlo?
  3. 3. Frameworks PHP
  4. 4. ¿Por qué elegir Symfony?
  5. 5. Primeros pasos
  6. 6. Enlaces de interés
  7. 7. Preguntas </li></ul>
  8. 8. Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Organización del proyecto </li><ul><li>Estructura de archivos y carpetas
  9. 9. Estructura lógica (namespaces)
  10. 10. Estilo de programación </li></ul></ul>Ventaja: Si una nueva persona se une al proyecto, puede estar trabajando en él en muy poco tiempo.
  11. 11. Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Modelo Vista Controlador integrado </li><ul><li>Separación de la lógica de negocio y la presentación de la información.
  12. 12. Varios entornos (desarrollo, test y producción). </li></ul></ul>Ventaja: Facilidad para repartir tareas. Por ejemplo, los diseñadores sólamente tocarían las vistas.
  13. 13. Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Modelo Vista Controlador integrado </li></ul>
  14. 14. Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Bases de datos </li><ul><li>Independencia del tipo de base de datos
  15. 15. Mapeado en clases (entidades) del esquema relacional.
  16. 16. Fixtures con datos de prueba.
  17. 17. Optimización de consultas para el SGBD utilizado. </li></ul></ul>
  18. 18. Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Detección de bugs </li><ul><li>Nos proporciona más información de la pila de errores o excepciones.
  19. 19. Sabemos exactamente si es un error del modelo (base de datos), de la vista o del controlador.
  20. 20. Al escribir menos código hay menos posibilidades de generar nuevos bugs. </li></ul></ul>
  21. 21. Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Publicación de la aplicación </li><ul><li>Si proporciona algún método para publicar la aplicación en producción, evitamos olvidos al subir archivos o hacerlo en orden incorrecto.
  22. 22. Herramientas como Ant o Phing ya hacen esa labor sin necesidad de un framework. </li></ul></ul>
  23. 23. Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Formularios </li><ul><li>Generación automática de formularios a partir del modelo.
  24. 24. Validaciones y tipos de datos predefinidos (fechas, emails, URLs...). </li></ul></ul>
  25. 25. Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Seguridad </li><ul><li>Seguridad integrada ante ataques XSS (Cross-site scripting), CSRF (Cross Site Request Forgery), SQL Injection... </li></ul></ul>
  26. 26. Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Otras ventajas </li><ul><li>Tests integrados
  27. 27. Helpers
  28. 28. Caché
  29. 29. Plugins
  30. 30. Posibilidad de extenderlo y adaptarlo a tus necesidades. </li></ul></ul>
  31. 31. Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb
  32. 32. Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb No reinventes la rueda
  33. 33. Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>También tiene algunas desventajas: </li><ul><li>Te puede llegar a limitar en desarrollos algo “especiales”.
  34. 34. Añade una nueva capa, lo que puede suponer un deterioro del rendimiento. </li></ul></ul><ul><ul><li>Si no lo dominas en profundidad, pueden llegar a ser frustrantes. </li></ul></ul>
  35. 35. Raúl Fraile Beneyto ¿Qué es un framework y por qué usarlo? Symfony2: Framework para PHP5 #symfonyproweb <ul><li>En resumen: te hace la vida (un poco) más facil </li></ul>
  36. 36. Raúl Fraile Beneyto Frameworks PHP Symfony2: Framework para PHP5 #symfonyproweb
  37. 37. Raúl Fraile Beneyto Frameworks PHP Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Intentan suplir algunas de las carencias de PHP => organización, separación de lógica y presentación...
  38. 38. Añadir seguridad. PHP, al ser tan “sencillo”, ha permitido que casi cualquiera haga aplicaciones web, muchas de ellas inseguras. </li></ul>
  39. 39. Raúl Fraile Beneyto ¿Por qué elegir Symfony? Symfony2: Framework para PHP5 #symfonyproweb ¿Y por qué elegir...? <ul><li>Zend Framework
  40. 40. CakePHP
  41. 41. Codeigniter
  42. 42. Otro </li></ul>Lo mejor si tienes tiempo: probar todos los que puedas
  43. 43. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Framework para PHP creado por Fabien Potencier (Sensio Labs).
  44. 44. Open-source.
  45. 45. Comunidad muy importante.
  46. 46. Excelente documentación y en diferentes idiomas (en versiones estables).
  47. 47. Basado en buenas prácticas. </li></ul>
  48. 48. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>La versión 1.0 salió en Enero de 2007 y requería PHP 5.0 + (a diferencia del resto de frameworks).
  49. 49. La última versión estable es la 1.4, que salió en Noviembre de 2009 y tendrá soporte hasta Noviembre 2012.
  50. 50. La versión 2 se ha reescrito desde cero. </li></ul>
  51. 51. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Actualmente se encuentra en la versión beta :
  52. 52. 2.0.0BETA1
  53. 53. 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. </li></ul>
  54. 54. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Características principales: </li><ul><li>Fácil de aprender.
  55. 55. Muy flexible con la introducción de bundles (framework de frameworks).
  56. 56. Completo.
  57. 57. Rápido.
  58. 58. Utilización de estándares (PHPUnit, Zend_Cache, Zend_Logger, PHP 5.3 autoload, Java JSR303). </li></ul></ul>
  59. 59. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Funcionamiento básico </li></ul>
  60. 60. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Bundles </li><ul><li>En Symfony2 TODO son bundles, incluido el propio framework.
  61. 61. Un bundle es un “paquete” con una estructura definida, que puede contener cualquier cosa e implementa una funcionalidad.
  62. 62. Permite utilizar bundles de terceros y compartir tus propios bundles entre distintos proyectos. </li></ul></ul>
  63. 63. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Bundles </li><ul><li>Algunos de los bundles incluidos en la Standard Edition: </li><ul><li>Assetic: gestor de “assets” para PHP 5.3 </li></ul></ul></ul><ul><ul><ul><li>Doctrine: ORM (object relational mapping)
  64. 64. Monolog: sistema de logs
  65. 65. SwiftMailer: envío de mails
  66. 66. Twig: lenguage de plantillas </li></ul></ul></ul>
  67. 67. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>PHP 5.3 </li><ul><li>Symfony2 NO FUNCIONA con versiones inferiores a PHP 5.3.2.
  68. 68. Esta versión de PHP introdujo mejoras importantes en el rendimiento (hasta un 20% de mejora) y la inclusión de namespaces. </li></ul></ul>
  69. 69. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Templates </li><ul><li>Se utiliza el patrón “decorator”.
  70. 70. En Symfony se pueden crear las vistas en PHP o en Twig. </li></ul></ul>http://www.twig-project.org/
  71. 71. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Templates: Twig </li><ul><li>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.
  72. 72. La primera vez que se ejecuta se cachea en PHP puro, por lo que su rendimiento es bueno.
  73. 73. Dispone de filtros. </li></ul></ul>
  74. 74. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Templates: Twig </li></ul><!DOCTYPE html> <html> <head> <title>Post: {{ titulo }} </title> </head> <body> <h1> {{ titulo }} </h1> <div> {{ contenido }} </div> <ul> {% for item in comentarios %} <li>{{ comentario.autor }}: {{ comentario.texto }}</li> {% endfor %} </ul> </body> </html> <!DOCTYPE html> <html> <head> <title>Post: <?php echo $titulo; ?></title> </head> <body> <h1><?php echo $titulo; ?></h1> <div><?php echo $contenido; ?></div> <ul> <?php foreach ($comentarios as $item){ ?> <li><?php echo $comentario.autor; ?></li> <?php } ?> </ul> </body> </html>
  75. 75. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Templates: Twig </li></ul><!DOCTYPE html> <html> <head> <title>Post: {{ titulo }} </title> </head> <body> <h1> {{ titulo | upper }} </h1> <h2>Fecha: {{ fecha | date(&quot;d/m/Y&quot;) }} </h2> <div> {{ contenido }} </div> </body> </html> <!DOCTYPE html> <html> <head> <title>Post: <?php echo $titulo; ?></title> </head> <body> <h1><?php echo strtoupper($titulo); ?></h1> <h2>Fecha: <?php echo date('d/m/Y', $fecha); ?></h2> <div><?php echo $contenido; ?></div> </body> </html>
  76. 76. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Templates: Twig </li><ul><li>Algunos filtros que se pueden utilizar: </li><ul><li>date, replace, url_encode, json_encode, title, capitalize, upper, lower, striptags, join, reverse, length... </li></ul><li>Funciones integradas </li><ul><li>divisibleby, none, even, odd, defined, empty... </li></ul><li>Puedes crear tus propias extensiones. </li></ul></ul>
  77. 77. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Templates: Twig </li><ul><li>Se puede integrar en algunos IDEs </li><ul><li>PHPStorm 2.1+ tiene soporte nativo. </li></ul></ul></ul><ul><ul><ul><li>Netbeans: https://github.com/blogsh/Twig-netbeans
  78. 78. Vim: http://jinja.pocoo.org/2/documentation/integration
  79. 79. Textmate: https://github.com/Anomareh/PHP-Twig.tmbundle </li></ul></ul></ul>
  80. 80. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Templates: Twig </li><ul><li>Utilizando el patrón “decorator”, el template “padre” deja huecos para que puedan ser rellenados por el template “hijo”. </li></ul></ul>{% block title %} Blog Proweb {% endblock %} {% extends &quot;padre.html&quot; %} {% block title %}Blog Proweb: Contacto{% endblock %} Padre Hijo
  81. 81. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Configuración </li><ul><li>La configuración global de la aplicación se encuentra en /app/config/.
  82. 82. Symfony permite configuración en YAML, XML, PHP o Annotations.
  83. 83. También permite una configuración distinta por cada entorno de ejecución (dev, prod, test). </li></ul></ul>
  84. 84. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Consola </li><ul><li>Symfony dispone de una consola de comandos para poder realizar algunas de las tareas más comunes: </li><ul><li>Crear bundles
  85. 85. Limpiar caché / “Calentar” caché
  86. 86. Generar las entidades de la BD
  87. 87. Ejecutar una consulta SQL / DQL
  88. 88. ... </li></ul></ul></ul>
  89. 89. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb
  90. 90. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Base de datos </li><ul><li>Se utiliza un ORM: Doctrine o Propel. </li></ul></ul><ul><ul><li>Doctrine mapea la base de datos relacional en clases (entidades). Incluso crea los getters/setters. doctrine:mapping:import
  91. 91. doctrine:generate:entities </li></ul></ul>
  92. 92. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Base de datos: persistencia </li></ul>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(); } ...
  93. 93. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Base de datos: consultas </li></ul>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(); ...
  94. 94. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Routing </li><ul><li>Se pueden definir las rutas en YAML, XML, PHP o Annotations. </li></ul></ul>/** * @extra:Route(&quot;/post/{slug}-{id}&quot;, name=&quot;_post_view&quot;) * @extra:Template() */ public function showAction( $slug, $id ) { [...] return array('post'=>$post); }
  95. 95. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Formularios </li><ul><li>Se han simplificado los formularios en esta versión de Symfony.
  96. 96. Pueden utilizar el modelo para construir los formularios, incluso adivinando los tipos de campos y validaciones. </li></ul></ul>
  97. 97. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Formularios: Controlador </li></ul>$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() , ));
  98. 98. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Formularios: Vista </li></ul><form action=&quot;{{ path('store_product') }}&quot; method=&quot;post&quot; {{ form_enctype(form) }}> {{ form_widget(form) }} <input type=&quot;submit&quot; /> </form>
  99. 99. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Formularios: Recoger datos </li></ul>$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')); } }
  100. 100. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Formularios: campos predefinidos </li><ul><li>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... </li></ul></ul>
  101. 101. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Admin Generator </li><ul><li>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.
  102. 102. En Symfony2 desaparece como parte del framework => AdminBundle. </li></ul></ul>
  103. 103. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Tests </li></ul><ul><ul><li>Symfony2 utiliza PHPUnit 3.5.11 (en esta versión abandonan Lime).
  104. 104. 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/ </li></ul></ul>@s_bergmann
  105. 105. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Debug </li></ul><ul><ul><li>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... </li></ul></ul>
  106. 106. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Debug </li></ul><ul><ul><li>También disponemos de un Profiler que almacena mucha información sobre la petición. Es una ampliación de la barra de herramientas.
  107. 107. Genera un código único por cada petición, por lo que se pueden recuperar posteriormente. </li></ul></ul>
  108. 108. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Debug: Profiler </li></ul>
  109. 109. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Assetic </li><ul><li>Gestor de assets (archivos JS, CSS, imágenes...) para PHP 5.3.
  110. 110. Viene incluido como Bundle en Symfony.
  111. 111. 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... </li></ul></ul>
  112. 112. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Assetic: Algunas herramientas que acepta </li><ul><li>Coffee Script: lenguaje más simple que JS.
  113. 113. LESS: mejora CSS con variables, funciones...
  114. 114. Google Closure Compiler: optimiza código JS.
  115. 115. JSMin: minify de código JS.
  116. 116. YUI Compressor: minify de JS y CSS.
  117. 117. OptiPNG: optimización de imágenes PNG. </li></ul></ul>
  118. 118. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Assetic: Ejemplo con YUI Compressor </li></ul>$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();
  119. 119. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Rendimiento </li><ul><li>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
  120. 120. Fabien Potencier define a Symfony2 como “Fast as Hell” </li></ul></ul>
  121. 121. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Rendimiento </li></ul>
  122. 122. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Rendimiento: ¿Cómo lo consigue? </li><ul><li>Utiliza PHP 5.3.2
  123. 123. Lazy-loading
  124. 124. Caché interna => archivos de configuración, templates... todo se cachea.
  125. 125. HTTP Cache </li></ul></ul>
  126. 126. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Rendimiento: HTTP Cache </li><ul><li>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.
  127. 127. Es necesario disponer de un proxy caché (p.ej. Varnish o Squid). Symfony lo lleva integrado. </li></ul></ul>
  128. 128. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Rendimiento: HTTP Cache </li></ul>
  129. 129. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Rendimiento: HTTP Cache </li></ul>
  130. 130. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Rendimiento: HTTP Cache </li></ul>
  131. 131. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Rendimiento: HTTP Cache </li></ul>60' 10' 1'
  132. 132. Raúl Fraile Beneyto Symfony Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Rendimiento: HTTP Cache </li><ul><li>Con Symfony2 podemos simular la comunicación “proxy cache <=> http server”, utilizando ESI. </li></ul></ul>$this->render('NoticiasBundle:Default:destacadas.html.twig', array('noticias'=>$noticias), array('standalone' => true) ); <esi:include src=&quot;http://...&quot; /> URL del fragmento
  133. 133. Raúl Fraile Beneyto Primeros pasos Symfony2: Framework para PHP5 #symfonyproweb <ul><li>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)... </li></ul>
  134. 134. Raúl Fraile Beneyto Primeros pasos: Blog del curso Proweb Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Descargar “Symfony Standard Edition” de http://symfony.com/download. </li></ul>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.
  135. 135. Raúl Fraile Beneyto Primeros pasos: Blog del curso Proweb Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Configurar Apache para que apunte a la carpeta “web”. VirtualHost para acceder más rápidamente: http://blog_proweb/[...]
  136. 136. Para comprobar que todo está correcto accedemos a: http://blog_proweb/app_dev.php/ </li></ul>
  137. 137. Raúl Fraile Beneyto Primeros pasos: Blog del curso Proweb Symfony2: Framework para PHP5 #symfonyproweb
  138. 138. Raúl Fraile Beneyto Primeros pasos: Blog del curso Proweb Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Crear bundle: </li></ul><ul><li>Se carga el namespace en /app/autoload.php y se registra en /app/AppKernel.php: </li></ul><ul><li>Crear bundle: </li></ul>
  139. 139. Raúl Fraile Beneyto Primeros pasos: Blog del curso Proweb Symfony2: Framework para PHP5 #symfonyproweb <ul><li>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/_configurator/ </li></ul>Servidor: localhost Usuario: user_blog_proweb Clave: 123456 Base de datos: blog_proweb
  140. 140. Raúl Fraile Beneyto Primeros pasos: Blog del curso Proweb Symfony2: Framework para PHP5 #symfonyproweb
  141. 141. Raúl Fraile Beneyto Primeros pasos: Blog del curso Proweb Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Mapear BD en clases </li></ul>
  142. 142. Raúl Fraile Beneyto Enlaces de interés Symfony2: Framework para PHP5 #symfonyproweb symfony.com
  143. 143. Raúl Fraile Beneyto Enlaces de interés Symfony2: Framework para PHP5 #symfonyproweb symfony.com/blog
  144. 144. Raúl Fraile Beneyto Enlaces de interés Symfony2: Framework para PHP5 #symfonyproweb symfony.es
  145. 145. Raúl Fraile Beneyto Enlaces de interés Symfony2: Framework para PHP5 #symfonyproweb symfony2bundles.org
  146. 146. Raúl Fraile Beneyto Enlaces de interés Symfony2: Framework para PHP5 #symfonyproweb groups.google.com/group/symfony-users
  147. 147. Raúl Fraile Beneyto Enlaces de interés Symfony2: Framework para PHP5 #symfonyproweb silex-project.org
  148. 148. Raúl Fraile Beneyto Enlaces de interés Symfony2: Framework para PHP5 #symfonyproweb <ul><li>Twitter: </li><ul><li>@fabpot: Creador de Symfony
  149. 149. @javiereguiluz: Blog de symfony.com y admin de symfony.es
  150. 150. @Kriswallsmith: Creador de Assetic
  151. 151. @desymfony: Jornadas Symfony en Castellón (1, 2 y 3 de julio) </li></ul></ul>
  152. 152. Raúl Fraile Beneyto ¡Muchas gracias! Symfony2: Framework para PHP5 #symfonyproweb ¿Preguntas? Seguro que sí... ;)
  153. 153. Raúl Fraile Beneyto Antes de acabar... Symfony2: Framework para PHP5 #symfonyproweb http://twtpoll.com/aazwai

×