Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Taller Symfony2

Betabeers
December 14, 2011
680

Taller Symfony2

presenta @marcos_quesada

Betabeers

December 14, 2011
Tweet

Transcript

  1. SYMFONY 2
    velocidad2
    jueves 15 de diciembre de 11

    View Slide

  2. Quien soy
    Marcos Quesada
    Desarrollador en Runroom
    Certificación ZEND PHP 5.3
    Just a professional web searcher!
    [email protected]
    @marcos_quesada
    jueves 15 de diciembre de 11

    View Slide

  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 & Performance
    jueves 15 de diciembre de 11

    View Slide

  4. Objetivos
     No inventar la rueda
     Ruby on Rails , Django , Spring... development
    style
     Monkeycode
     Reutilización del código
    jueves 15 de diciembre de 11

    View Slide

  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

    View Slide

  6. Componentes
    jueves 15 de diciembre de 11

    View Slide

  7. 10
    Performance
    Symfony 2 es:
    - 2 veces mas rápido que symfony 1.4
    - 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 PHP
    jueves 15 de diciembre de 11

    View Slide

  8. HTTP CACHE
    -implementa HTTP 1.1 + ESI
    -ESI: simular la comunicacion proxy_cache => http_server
    -

    View Slide

  9. Rendimiento
    jueves 15 de diciembre de 11

    View Slide

  10. Doctrine 2
    Presentación Nacho Martin Doctrine: http://es.scribd.com/doc/34058712/Doctrine
    jueves 15 de diciembre de 11

    View Slide

  11. Request flow
    jueves 15 de diciembre de 11

    View Slide

  12. Empezando
     deps & deps.lock
     parameters.ini
     appKernel
     autoload
    jueves 15 de diciembre de 11

    View Slide

  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:bundle
    jueves 15 de diciembre de 11

    View Slide

  14. Modelo
     Metadatos al poder!
     Entidades
     Repositories
     DataFixtures
    Flujo de trabajo : manos a la obra!
    jueves 15 de diciembre de 11

    View Slide

  15. Controllers
     Actions
     php app/console doctrine:generate:crud
     php app/console router:debug
     Routing.yml
    jueves 15 de diciembre de 11

    View Slide

  16. Forms
     Object Oriented Forms
     Validación por metadatos $form->isValid()
    jueves 15 de diciembre de 11

    View Slide

  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 rendimiento
    jueves 15 de diciembre de 11

    View Slide

  18. TWIG
    {% for user in users %}
    {{ user.username }}
    {% else %}
    No users found
    {% endfor %}
    jueves 15 de diciembre de 11

    View Slide

  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 %}

    {{ elem.name }}

    {% endfor %}
    jueves 15 de diciembre de 11

    View Slide

  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

    View Slide

  21. ASSETIC
     php app/console assets:install --symlink web/
     Plugins:
     Coffee Script
     LESS
     JSMin
     YUI
     OptiPNG
    jueves 15 de diciembre de 11

    View Slide

  22. Assetic + YUI Compressor
    Config.yml
    jueves 15 de diciembre de 11

    View Slide

  23. Assetic + YUI Compressor
    layout.html.twig
    jueves 15 de diciembre de 11

    View Slide

  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:debug
    jueves 15 de diciembre de 11

    View Slide

  25. Dependence Injection
    Desacoplar IndexController de Controller
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\DependencyInjection\ContainerAware;
    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

    View Slide

  26. Controller as a Service
    jueves 15 de diciembre de 11

    View Slide

  27. Ejemplo de desarrollo
     PaginatorBundle
     Cortar Slices de un fetchAll
     N items
     Offset
     Renderizar el paginador
     Widget html
    jueves 15 de diciembre de 11

    View Slide

  28. Resultado
     Accediendo al helper paginator:
    $myPaginator = $this->get('paginator.service');
     Renderizado del paginador

    {{ paginator() | raw}}

    jueves 15 de diciembre de 11

    View Slide

  29. Test Unitarios
     phpunit -c app/
     $request = $client->getRequest();
     $container = $client->getContainer();
     $crawler = $client->getCrawler();
    http://symfony.com/doc/2.0/book/testing.html
    jueves 15 de diciembre de 11

    View Slide

  30. Sismo Bundle
    jueves 15 de diciembre de 11

    View Slide

  31. + Bundles
     FOS User
     Sonata Admin
     Sonata Page
     Sonata User
     LadyBug
    jueves 15 de diciembre de 11

    View Slide

  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-twig
    jueves 15 de diciembre de 11

    View Slide

  33. Gracias!!
    [email protected]
    @marcos_quesada
    jueves 15 de diciembre de 11

    View Slide