SlideShare una empresa de Scribd logo
SYMFONY 2

                                velocidad 2




jueves 15 de diciembre de 11
Quien soy

                                       Marcos Quesada

                                  Desarrollador en Runroom

                                 Certificación ZEND PHP 5.3

                               Just a professional web searcher!


                                marcos.quesadas@gmail.com
                                    @marcos_quesada




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


                No inventar la rueda
                Ruby on Rails , Django , Spring... development
                 style
                Monkeycode
                Reutilización del código




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




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




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




jueves 15 de diciembre de 11
Doctrine 2




               Presentación Nacho Martin Doctrine: http://es.scribd.com/doc/34058712/Doctrine

jueves 15 de diciembre de 11
Request flow




jueves 15 de diciembre de 11
Empezando

                              deps & deps.lock
                              parameters.ini
                              appKernel
                              autoload




jueves 15 de diciembre de 11
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
Modelo
                Metadatos al poder!
                Entidades
                Repositories
                DataFixtures


        Flujo de trabajo : manos a la obra!




jueves 15 de diciembre de 11
Controllers


               Actions
               php app/console doctrine:generate:crud
               php app/console router:debug
               Routing.yml




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




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

             {% for user in users %}
               <li>{{ user.username }}</li>
             {% else %}
                   <li>No users found</li>
             {% endfor %}




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

                       php app/console assets:install --symlink web/
                       Plugins:
                                  Coffee Script
                                  LESS
                                  JSMin
                                  YUI
                                  OptiPNG




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




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




jueves 15 de diciembre de 11
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
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
Controller as a Service




jueves 15 de diciembre de 11
Ejemplo de desarrollo

                PaginatorBundle
                              Cortar Slices de un fetchAll
                                     N items
                                     Offset
                              Renderizar el paginador
                                     Widget html




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




jueves 15 de diciembre de 11
+ Bundles

                              FOS User
                              Sonata Admin
                              Sonata Page
                              Sonata User
                              LadyBug




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


                               marcos.quesadas@gmail.com
                                   @marcos_quesada




jueves 15 de diciembre de 11

Más contenido relacionado

ODP
Symfony2: Framework para PHP5
PDF
Composer: Gestionando dependencias en PHP
PDF
Mis primeros pasos con Symfony 2
PDF
Curso Php
PDF
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
PDF
Symfony2 Formacion y primeros pasos
PPT
Adentrándonos al Framework Symfony
PDF
Symfony en Drupal 8 - DrupalCamp Spain
Symfony2: Framework para PHP5
Composer: Gestionando dependencias en PHP
Mis primeros pasos con Symfony 2
Curso Php
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Symfony2 Formacion y primeros pasos
Adentrándonos al Framework Symfony
Symfony en Drupal 8 - DrupalCamp Spain

La actualidad más candente (18)

ODP
Desarrollo de aplicaciones web con PHP y symfony
PDF
Mi primer programa en Symfony2
PDF
Clase 3 instalación y primeros pasos
PDF
Despliegue de aplicaciones PHP
ODP
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
PDF
Las buenas prácticas oficiales para aplicaciones Symfony
PPTX
Introduccion A Php
 
PDF
Curso Avanzado PHP para EHU/UPV
PDF
(Desarrollo web).manual.php.5
PDF
Manual completo-php-5
PPTX
CRUD básico con Symfony
PPTX
Framework Laravel
PPT
Symfony2: Interacción con CSS, JS y HTML5
PDF
Introduction grails-es
ODP
Taller introduccion symfony2
PDF
PHP Avanzado: Patrones de diseño
PPT
Symfony2: Optimización y rendimiento
Desarrollo de aplicaciones web con PHP y symfony
Mi primer programa en Symfony2
Clase 3 instalación y primeros pasos
Despliegue de aplicaciones PHP
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Las buenas prácticas oficiales para aplicaciones Symfony
Introduccion A Php
 
Curso Avanzado PHP para EHU/UPV
(Desarrollo web).manual.php.5
Manual completo-php-5
CRUD básico con Symfony
Framework Laravel
Symfony2: Interacción con CSS, JS y HTML5
Introduction grails-es
Taller introduccion symfony2
PHP Avanzado: Patrones de diseño
Symfony2: Optimización y rendimiento
Publicidad

Similar a Symfony2 (20)

PDF
Desymfony 2011 - Introducción a Symfony2
PDF
Slides components en
PDF
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP
PDF
Symfony2 y su ecosistema
PDF
Desymfony - Servicios
PDF
Introducción a Symfony
PPTX
BilboStack - Php en el 2012
PPT
Symfony2 un framework para maximizar tu productividad en desarrollo web
PDF
Symfony 4, renovarse o morir
PPTX
PHP Con symfony
PDF
Componentes, el arma secreta de Symfony2
ODP
Introducción a Symfony
PDF
Symfony2: Framework para PHP5
PDF
Silex, desarrollo web ágil y profesional con PHP
PDF
Symfony2 es
PDF
Desymfony 2011 - Tutorial #5: Backend
PDF
Symfony2, Jornadas Symfony
PDF
Symfony 2 - decharlas 2010
PDF
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
PDF
Symfony 1 y 2
Desymfony 2011 - Introducción a Symfony2
Slides components en
Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP
Symfony2 y su ecosistema
Desymfony - Servicios
Introducción a Symfony
BilboStack - Php en el 2012
Symfony2 un framework para maximizar tu productividad en desarrollo web
Symfony 4, renovarse o morir
PHP Con symfony
Componentes, el arma secreta de Symfony2
Introducción a Symfony
Symfony2: Framework para PHP5
Silex, desarrollo web ágil y profesional con PHP
Symfony2 es
Desymfony 2011 - Tutorial #5: Backend
Symfony2, Jornadas Symfony
Symfony 2 - decharlas 2010
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Symfony 1 y 2
Publicidad

Más de betabeers (20)

PPSX
IONIC, el framework para crear aplicaciones híbridas multiplataforma
PDF
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
PPTX
Blockchain: la revolución industrial de internet - Oscar Lage
PDF
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
PDF
Desarrollo web en Nodejs con Pillars por Chelo Quilón
PDF
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
PDF
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
PDF
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
PPTX
Introducción a scrum - Rodrigo Corral (Plain Concepts)
PPTX
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
PPTX
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
PDF
Elemental, querido Watson - Caso de Uso
PDF
Seguridad en tu startup
PPTX
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
PDF
Buenas prácticas para la optimización web
PDF
La magia de Scrum
PDF
Programador++ por @wottam
PPTX
RaspberryPi: Tu dispositivo para IoT
PDF
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
PDF
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
IONIC, el framework para crear aplicaciones híbridas multiplataforma
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Blockchain: la revolución industrial de internet - Oscar Lage
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
Desarrollo web en Nodejs con Pillars por Chelo Quilón
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Elemental, querido Watson - Caso de Uso
Seguridad en tu startup
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Buenas prácticas para la optimización web
La magia de Scrum
Programador++ por @wottam
RaspberryPi: Tu dispositivo para IoT
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015

Symfony2

  • 1. SYMFONY 2 velocidad 2 jueves 15 de diciembre de 11
  • 2. Quien soy Marcos Quesada Desarrollador en Runroom Certificación ZEND PHP 5.3 Just a professional web searcher! marcos.quesadas@gmail.com @marcos_quesada jueves 15 de diciembre de 11
  • 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
  • 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
  • 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. Componentes jueves 15 de diciembre de 11
  • 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 PHP jueves 15 de diciembre de 11
  • 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. Rendimiento jueves 15 de diciembre de 11
  • 10. Doctrine 2 Presentación Nacho Martin Doctrine: http://es.scribd.com/doc/34058712/Doctrine jueves 15 de diciembre de 11
  • 11. Request flow jueves 15 de diciembre de 11
  • 12. Empezando  deps & deps.lock  parameters.ini  appKernel  autoload jueves 15 de diciembre de 11
  • 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
  • 14. Modelo  Metadatos al poder!  Entidades  Repositories  DataFixtures Flujo de trabajo : manos a la obra! jueves 15 de diciembre de 11
  • 15. Controllers  Actions  php app/console doctrine:generate:crud  php app/console router:debug  Routing.yml jueves 15 de diciembre de 11
  • 16. Forms  Object Oriented Forms  Validación por metadatos $form->isValid() jueves 15 de diciembre de 11
  • 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
  • 18. TWIG {% for user in users %} <li>{{ user.username }}</li> {% else %} <li>No users found</li> {% endfor %} jueves 15 de diciembre de 11
  • 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. 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. ASSETIC  php app/console assets:install --symlink web/  Plugins:  Coffee Script  LESS  JSMin  YUI  OptiPNG jueves 15 de diciembre de 11
  • 22. Assetic + YUI Compressor Config.yml jueves 15 de diciembre de 11
  • 23. Assetic + YUI Compressor layout.html.twig jueves 15 de diciembre de 11
  • 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
  • 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. Controller as a Service jueves 15 de diciembre de 11
  • 27. Ejemplo de desarrollo  PaginatorBundle  Cortar Slices de un fetchAll  N items  Offset  Renderizar el paginador  Widget html jueves 15 de diciembre de 11
  • 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. 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
  • 30. Sismo Bundle jueves 15 de diciembre de 11
  • 31. + Bundles  FOS User  Sonata Admin  Sonata Page  Sonata User  LadyBug jueves 15 de diciembre de 11
  • 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
  • 33. Gracias!! marcos.quesadas@gmail.com @marcos_quesada jueves 15 de diciembre de 11