SYMFONY 2                                velocidad 2jueves 15 de diciembre de 11
Quien soy                                       Marcos Quesada                                  Desarrollador en Runroom  ...
¿Que es Symfony?               First, Symfony2 is a reusable set of standalone, decoupled, and                  cohesive P...
Objetivos                No inventar la rueda                Ruby on Rails , Django , Spring... development             ...
Open Source     + Community:“people that are part of a larger ecosystem that makes       Symfony better”     - Symfony 2.0...
Componentesjueves 15 de diciembre de 11
Performance     Symfony 2 es:          - 2 veces mas rápido que symfony 1.4                 10          - 3.5 veces mas rá...
HTTP CACHE    -implementa HTTP 1.1 + ESI          -ESI: simular la comunicacion proxy_cache => http_server                ...
Rendimientojueves 15 de diciembre de 11
Doctrine 2               Presentación Nacho Martin Doctrine: http://es.scribd.com/doc/34058712/Doctrinejueves 15 de diciem...
Request flowjueves 15 de diciembre de 11
Empezando                              deps & deps.lock                              parameters.ini                     ...
Bundles                Paquete con una estructura definida, que puede                 contener cualquier cosa para implem...
Modelo                Metadatos al poder!                Entidades                Repositories                DataFixt...
Controllers               Actions               php app/console doctrine:generate:crud               php app/console ro...
Forms                Object Oriented Forms                Validación por metadatos $form->isValid()jueves 15 de diciembr...
TWIG                Templates implementadas con el patron decorator                 El patrón padre deja huecos para que ...
TWIG             {% for user in users %}               <li>{{ user.username }}</li>             {% else %}                ...
TWIG{% for elem in arrMenu %}{% set classes = ["topmenu-button"] %}{% if loop.first %}{% set classes = classes|merge(["fir...
TWIG        Formateadores:        {{ entity.publishedat | localeDate({{app.request.session.locale}},             full) }} ...
ASSETIC                       php app/console assets:install --symlink web/                       Plugins:              ...
Assetic + YUI Compressor        Config.ymljueves 15 de diciembre de 11
Assetic + YUI Compressor          layout.html.twigjueves 15 de diciembre de 11
Dependence Injection                        Clave de Symfony 2                        Reutilización de código           ...
Dependence Injection         Desacoplar IndexController de Controller          use SymfonyBundleFrameworkBundleControllerC...
Controller as a Servicejueves 15 de diciembre de 11
Ejemplo de desarrollo                PaginatorBundle                              Cortar Slices de un fetchAll          ...
Resultado                Accediendo al helper paginator:        $myPaginator = $this->get(paginator.service);           ...
Test Unitarios                 phpunit -c app/                $request = $client->getRequest();                $contain...
Sismo Bundlejueves 15 de diciembre de 11
+ Bundles                              FOS User                              Sonata Admin                              ...
Referencias            Symfony.com            http://www.symfony.es/2011/12/02/sf2vigo-optimizacion-y-rendimiento/     ...
Gracias!!                               marcos.quesadas@gmail.com                                   @marcos_quesadajueves ...
Upcoming SlideShare
Loading in …5
×

Symfony2

719 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
719
On SlideShare
0
From Embeds
0
Number of Embeds
45
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Symfony2

  1. 1. SYMFONY 2 velocidad 2jueves 15 de diciembre de 11
  2. 2. Quien soy Marcos Quesada Desarrollador en Runroom Certificación ZEND PHP 5.3 Just a professional web searcher! marcos.quesadas@gmail.com @marcos_quesadajueves 15 de diciembre de 11
  3. 3. ¿Que es Symfony? First, Symfony2 is a reusable set of standalone, decoupled, and cohesive PHP components that solve common web development problems. Then, based on these components, Symfony2 is also a full-stack web framework. Velocidad de desarrollo & Performancejueves 15 de diciembre de 11
  4. 4. Objetivos  No inventar la rueda  Ruby on Rails , Django , Spring... development style  Monkeycode  Reutilización del códigojueves 15 de diciembre de 11
  5. 5. Open Source + Community:“people that are part of a larger ecosystem that makes Symfony better” - Symfony 2.0 RC August 2011 - Symfony 2.0.6 : Bug solved! (hack suplantación de usuario)jueves 15 de diciembre de 11
  6. 6. Componentesjueves 15 de diciembre de 11
  7. 7. Performance Symfony 2 es: - 2 veces mas rápido que symfony 1.4 10 - 3.5 veces mas rápido Zend Framework 1.11 Como consigue ser tan rápido? -PHP 5.3.2 -APC : precompilado bytecoding -Lazy Loading Cache Interna: archivos de configuración, templates ... todo se cachea en PHPjueves 15 de diciembre de 11
  8. 8. HTTP CACHE -implementa HTTP 1.1 + ESI -ESI: simular la comunicacion proxy_cache => http_server -<esi:include src="http:// …. -$this>render(NoticiasBundle:Default:destacadas.html.twig, array(noticias => $noticias), array(standalone => true) ); -Symfony lo lleva integrado -Proxy cache externo (Varnish , Squid)jueves 15 de diciembre de 11
  9. 9. Rendimientojueves 15 de diciembre de 11
  10. 10. Doctrine 2 Presentación Nacho Martin Doctrine: http://es.scribd.com/doc/34058712/Doctrinejueves 15 de diciembre de 11
  11. 11. Request flowjueves 15 de diciembre de 11
  12. 12. Empezando  deps & deps.lock  parameters.ini  appKernel  autoloadjueves 15 de diciembre de 11
  13. 13. Bundles  Paquete con una estructura definida, que puede contener cualquier cosa para implementar una funcionalidad  Reutilización de código  Paquetes de terceros  php app/console generate:bundlejueves 15 de diciembre de 11
  14. 14. Modelo  Metadatos al poder!  Entidades  Repositories  DataFixtures Flujo de trabajo : manos a la obra!jueves 15 de diciembre de 11
  15. 15. Controllers  Actions  php app/console doctrine:generate:crud  php app/console router:debug  Routing.ymljueves 15 de diciembre de 11
  16. 16. Forms  Object Oriented Forms  Validación por metadatos $form->isValid()jueves 15 de diciembre de 11
  17. 17. TWIG  Templates implementadas con el patron decorator El patrón padre deja huecos para que sean rellenados por sus hijos  Simular al lenguaje de templates de Django  la primera vez que se ejecuta se cache en php , mejora su rendimientojueves 15 de diciembre de 11
  18. 18. TWIG {% for user in users %} <li>{{ user.username }}</li> {% else %} <li>No users found</li> {% endfor %}jueves 15 de diciembre de 11
  19. 19. TWIG{% for elem in arrMenu %}{% set classes = ["topmenu-button"] %}{% if loop.first %}{% set classes = classes|merge(["first"]) %}{% endif %}{% if loop.last %}{% set classes = classes|merge(["last"]) %}{% endif %}<div class="{{ classes | join(" ") }}"> <a href="{{ elem.url }}">{{ elem.name }}</a></div>{% endfor %}jueves 15 de diciembre de 11
  20. 20. TWIG Formateadores: {{ entity.publishedat | localeDate({{app.request.session.locale}}, full) }} {{ entity.publishedat | date(Y-m-d H:i:s) }} Variables en plantilla: {% set pointer = 0 %}jueves 15 de diciembre de 11
  21. 21. ASSETIC  php app/console assets:install --symlink web/  Plugins:  Coffee Script  LESS  JSMin  YUI  OptiPNGjueves 15 de diciembre de 11
  22. 22. Assetic + YUI Compressor Config.ymljueves 15 de diciembre de 11
  23. 23. Assetic + YUI Compressor layout.html.twigjueves 15 de diciembre de 11
  24. 24. Dependence Injection  Clave de Symfony 2  Reutilización de código  Flexibilidad  services & containers  inyección de servicios en servicios  php app/console container:debugjueves 15 de diciembre de 11
  25. 25. Dependence Injection Desacoplar IndexController de Controller use SymfonyBundleFrameworkBundleControllerController; use SymfonyComponentDependencyInjectionContainerAware; de: $em = $this->getDoctrine()->getEntityManager(); a: $em = $this->get(doctrine)->getEntityManager(); de: return $this->render( a: return $this->container->get(templating)->renderResponse( http://miller.limethinking.co.uk/2011/06/14/symfony2-moving-away-from-the-base-controller/jueves 15 de diciembre de 11
  26. 26. Controller as a Servicejueves 15 de diciembre de 11
  27. 27. Ejemplo de desarrollo  PaginatorBundle  Cortar Slices de un fetchAll  N items  Offset  Renderizar el paginador  Widget htmljueves 15 de diciembre de 11
  28. 28. Resultado  Accediendo al helper paginator: $myPaginator = $this->get(paginator.service);  Renderizado del paginador <div class="paginator"> {{ paginator() | raw}} </div>jueves 15 de diciembre de 11
  29. 29. Test Unitarios  phpunit -c app/  $request = $client->getRequest();  $container = $client->getContainer();  $crawler = $client->getCrawler(); http://symfony.com/doc/2.0/book/testing.htmljueves 15 de diciembre de 11
  30. 30. Sismo Bundlejueves 15 de diciembre de 11
  31. 31. + Bundles  FOS User  Sonata Admin  Sonata Page  Sonata User  LadyBugjueves 15 de diciembre de 11
  32. 32. Referencias  Symfony.com  http://www.symfony.es/2011/12/02/sf2vigo-optimizacion-y-rendimiento/  http://es.scribd.com/doc/34058712/Doctrine  http://www.slideshare.net/raulfraile/symfony2-framework-para-php5? from=ss_embed  http://miller.limethinking.co.uk/2011/06/14/symfony2-moving-away-from-the- base-controller/  http://www.slideshare.net/javier.eguiluz/desymfony-2011-twigjueves 15 de diciembre de 11
  33. 33. Gracias!! marcos.quesadas@gmail.com @marcos_quesadajueves 15 de diciembre de 11

×