Your SlideShare is downloading. ×
0
Jornadas Symfony                               5 y 6 de julio 2010
                                               Universi...
NOTA
            Esta presentación es la versión simplificada de la que se
            utilizó en las primeras Jornadas Sy...
NOTE
            This is the simplified version of the presentation used at
            the first Spanish Symfony Conferen...
Symfony 2
            Javier Eguíluz, symfony.es




Jornadas Symfony                         5 y 6 de julio 2010
        ...
sesión patrocinada por




                   www.ideatea.com


Jornadas Symfony                            http://decharl...
¿Qué es Symfony 2?



Jornadas Symfony                   http://decharlas.uji.es/symfony
symfony

Jornadas Symfony             http://decharlas.uji.es/symfony
Symfony2

Jornadas Symfony          http://decharlas.uji.es/symfony
¿En qué se diferencian
                         sf 1 y sf2?


Jornadas Symfony                      http://decharlas.uji.e...
en todo

Jornadas Symfony             http://decharlas.uji.es/symfony
en casi todo

Jornadas Symfony             http://decharlas.uji.es/symfony
La evolución de
                      Symfony


Jornadas Symfony                     http://decharlas.uji.es/symfony
sf 1.0                  2007


                   symfony


Jornadas Symfony             http://decharlas.uji.es/symfony
sf 1.2                                            2008
     sfRequest     sfRouting   sfLogger      sfI18N          sfUser...
sf 1.4                  2009


                   symfony


Jornadas Symfony             http://decharlas.uji.es/symfony
¿Por qué reescribirlo
                     todo de nuevo?

Jornadas Symfony                     http://decharlas.uji.es/sy...
Problemas


                   Muchos archivos
                   Configuración
                   Difícil de aprender
   ...
Nuestro primer
                   proyecto Symfony2


Jornadas Symfony                   http://decharlas.uji.es/symfony
5.3.2   subversion

Jornadas Symfony                 http://decharlas.uji.es/symfony
> git clone
   http://github.com/symfony/
   symfony-sandbox.git




Jornadas Symfony                http://decharlas.uji....
1.x

   symfony 1.4     8.5 MB
     sandbox       3.919 archivos
                                                   2.x
  ...
Demo

Jornadas Symfony          http://decharlas.uji.es/symfony
> php hello/console -s


   > init:app frontend
                   frontend/
                   web/
                   --...
El código fuente



Jornadas Symfony                      http://decharlas.uji.es/symfony
1.x                                                    2.x
  <?php                                             <?php

  cl...
1.x                                                    2.x
  <?php                                             <?php

  cl...
1.x                                                    2.x
  <?php                                             <?php

  cl...
1.x                                                    2.x
  <?php                                             <?php

  cl...
<?php

 namespace SymfonyFrameworkFoundationBundle;

 use          SymfonyComponents...ContainerInterface;
 use          S...
namespaces


Jornadas Symfony                http://decharlas.uji.es/symfony
class Migration
  {
      ...
  }




  class Migration
  {
      ...
  }



Jornadas Symfony    http://decharlas.uji.es/s...
class sfMigration
  {
      ...
  }




  class Doctrine_Migration
  {
      ...
  }



Jornadas Symfony             http:...
namespace Symfony;

  class Migration
  {
      ...
  }



  namespace Doctrine;

  class Migration
  {
      ...
  }
Jorn...
namespace Symfony;         namespace Doctrine;

     class Migration            class Migration
     {                    ...
SymfonyComponents
                   SymfonyFramework

                   SymfonyFoundation


Jornadas Symfony            ...
SymfonyComponents
            BrowserKit          Console     CssSelector

                   DependencyInjection      Dom...
completo xxxxxx
             xxxxx
    xxxxxxxx xxxxxx
Jornadas Symfony   http://decharlas.uji.es/symfony
Estructura del
                     proyecto


Jornadas Symfony                    http://decharlas.uji.es/symfony
1.x                                 2.x
    mi_proyecto/          mi_proyecto/
     apps/                 frontend/
      ...
mi_proyecto/
                    frontend/
                    src/
                    web/
Jornadas Symfony             ...
mi_proyecto/frontend/
              frontendKernel.php




Jornadas Symfony                   http://decharlas.uji.es/symf...
mi_proyecto/frontend/
              frontendKernel.php
              cache/
              logs/
              config/




...
mi_proyecto/frontend/
              frontendKernel.php
              cache/
              logs/
              config/
    ...
1.x                              2.x




           7 archivos         3 archivos
           124 líneas         35 líneas
...
mi_proyecto/
                    frontend/
                    src/
                    web/
Jornadas Symfony             ...
mi_proyecto/src/
              autoload.php




Jornadas Symfony             http://decharlas.uji.es/symfony
mi_proyecto/src/
              autoload.php
              Application/
              Bundle/
              vendor/




Jor...
mi_proyecto/src/
              autoload.php
              Application/
              Bundle/
              vendor/
       ...
mi_proyecto/src/
              autoload.php
              Application/
                FrontendBundle/
              Bundl...
1.x                             2.x



                   Proyecto         Proyecto
        Aplicación                  Ap...
Aplicación 1                 Proyecto
                              Módulo 2
                                           Pl...
Aplicación 1                       Proyecto
            Aplicación 2


                   Módulo 1       Módulo 2     Módu...
Aplicación 1                      Proyecto
            Aplicación 2


                   Bundle 1       Bundle 2     Bundl...
Bundles
                   (paquetes)


Jornadas Symfony                http://decharlas.uji.es/symfony
« Un bundle es un conjunto de
               archivos que implementan una
                      funcionalidad »



Jornada...
Proyecto                                             1.x

          jobeet
    Aplicaciones
          frontend, backend
  ...
Proyecto                                        2.x

          jobeet
    Aplicaciones
          frontend, backend
    Bun...
Proyecto                                            2.x

          jobeet
    Aplicaciones
          frontend, backend
   ...
Proyecto                                             2.x

          jobeet
    Aplicaciones
          frontend, backend
  ...
1.x                           2.x


            Aplicación
                   Módulo
                                     ...
mi_proyecto/src/
              autoload.php
              Application/
                FrontendBundle/
              Bundl...
mi_proyecto/src/Application/
              FrontendBundle/
                Controller/
                Resources/




Jorn...
mi_proyecto/src/Application/
              FrontendBundle/
                Controller/
                  DefaultController...
mi_proyecto/src/Application/
              FrontendBundle/
                Controller/
                  DefaultController...
mi_proyecto/src/Application/
              FrontendBundle/
                Controller/
                  DefaultController...
twig

Jornadas Symfony          http://decharlas.uji.es/symfony
PropelBundle/
              Command/
              DependencyInjection/
              Logger/
              Resources/
   ...
TwigBundle/
              DependencyInjection/
              Extension/
              Loader/
              Renderer/
    ...
Jornadas Symfony   http://decharlas.uji.es/symfony
completo modular
             xxxxx
    xxxxxxxx xxxxxx
Jornadas Symfony   http://decharlas.uji.es/symfony
Inyección de
                   Dependencias


Jornadas Symfony                   http://decharlas.uji.es/symfony
Inyección de
      Dependencias    DI
       Inversion of
       Control        IoC
Jornadas Symfony       http://decharla...
Inyección de
      Dependencias   DI


Jornadas Symfony     http://decharlas.uji.es/symfony
1.x                        2.x

  sfConfig
  sfProjectConfiguration
  sfAppConfiguration
  sfContext                DI
  c...
Problema
               ¿Cómo configuro un objeto
               mailer para enviar emails
               desde mis aplica...
public function emailAction()
        {
          $mailer = $this->getMailer();

              $mensaje = Swift_Message::n...
class Mailer
       {
         function __construct() {
           $this->setUsername('xxxxxxxx')
           $this->setPas...
class Mailer
       {
         function __construct() {
           $this->setUsername(MAILER_USERNAME)
           $this->s...
class Mailer
       {
         function __construct($user, $pass) {
           $this->setUsername($user)
           $this-...
class Mailer
       {
         function __construct($transport) {
           $this->transport = $transport;
         }
   ...
DIC

Jornadas Symfony         http://decharlas.uji.es/symfony
D ependency
                   I njection
                   C ontainer
Jornadas Symfony                 http://decharlas....
DIC =   configuración
                       flexible



Jornadas Symfony            http://decharlas.uji.es/symfony
frontend/config/config.yml
        swift.mailer:
            transport: gmail
            username: xxxxxxxx
            p...
DIC
                   ! Objetos globales
                   " Modelo
                   " Tus clases

Jornadas Symfony   ...
El modelo



Jornadas Symfony               http://decharlas.uji.es/symfony
Jornadas Symfony   http://decharlas.uji.es/symfony
Jornadas Symfony   http://decharlas.uji.es/symfony
ORM

                   DBAL

                   PDO
Jornadas Symfony          http://decharlas.uji.es/symfony
ORM
                   ODM
Jornadas Symfony         http://decharlas.uji.es/symfony
Object Document Mapper



Jornadas Symfony                      http://decharlas.uji.es/symfony
NoSQL

Jornadas Symfony           http://decharlas.uji.es/symfony
NoSQL

Jornadas Symfony           http://decharlas.uji.es/symfony
Jornadas Symfony   http://decharlas.uji.es/symfony
doctrine:ensure-production-settings
     doctrine:cache:clear-metadata
     doctrine:cache:clear-query
     doctrine:clear...
doctrine:mapping:convert
     doctrine:mapping:convert-d1-schema
     doctrine:mapping:import
     doctrine:query:dql
    ...
class DefaultController extends Controller
  {
    public function indexAction()
    {
      $conexion = $this->container-...
class DefaultController extends Controller
  {
    public function modificarAction()
    {
      $orm = $this->getEntityMa...
class DefaultController extends Controller
  {
    public function modificarAction()
    {
      $odm = $this->getDocument...
La Vista



Jornadas Symfony              http://decharlas.uji.es/symfony
1.x                              2.x

           slot
         layout
         partial         plantilla
        plantilla...
1.x                               2.x

                   slot slot
                layout plantilla + slot
              ...
completo modular
             fácil
    xxxxxxxx xxxxxx
Jornadas Symfony   http://decharlas.uji.es/symfony
1.x
<html>
  <head>
    <meta http-equiv="Content-Type"
     content="text/html; charset=utf-8" />
  </head>

  <body>
   ...
2.x
<html>
  <head>
    <meta http-equiv="Content-Type"
     content="text/html; charset=utf-8" />
  </head>

  <body>
   ...
<?php $view->extend(
          'FrontendBundle:Default:layout'
        ); ?>

        <h1><?php echo $oferta['titulo'] ?><...
$view->extend('FrontendBundle:Default:layout');


   src/
     Application/
       FrontendBundle/
         Resources/
   ...
$view->extend('FrontendBundle::layout');


   src/
     Application/
       FrontendBundle/
         Resources/
          ...
$view->extend('PlantillasBundle::layout');


   src/
     Bundle/
       PlantillasBundle/
         Resources/
           ...
$view->extend(
        'PlantillasBundle::layout_pagina'
      );




Jornadas Symfony                            http://d...
$view->extend(
        'PlantillasBundle::layout_seccion'
      );




Jornadas Symfony                             http:/...
$view->extend(
        'PlantillasBundle::layout'
      );




Jornadas Symfony                     http://decharlas.uji.e...
echo $view->render(
         'SitioBundle::buscador'
       )

       ...

       echo $view->render(
         'NoticiasBu...
echo $view->actions->output(
         'BolsaBundle:Cotizaciones:indices',
         array('indice' => 'IBEX35')
       )

 ...
$view->extend(...)

           $view->render(...)

           $view->actions->output(...)



Jornadas Symfony             ...
Helpers



Jornadas Symfony             http://decharlas.uji.es/symfony
Los helpers de
         Symfony2 son objetos


Jornadas Symfony          http://decharlas.uji.es/symfony
<a href="<?php
         echo $view->router->generate('portada')
       ?>">
       Portada
       </a>




Jornadas Symfon...
1.x
      <?php include_stylesheets() ?>

      <?php use_stylesheet('main.css') ?>




                                  ...
«We're trading line length
              for lower [code] complexity»

                               David Heinemeier
   ...
Plantillas avanzadas



Jornadas Symfony                     http://decharlas.uji.es/symfony
twig

Jornadas Symfony          http://decharlas.uji.es/symfony
PHP


     <h1><?php echo $oferta['titulo'] ?></h1>




                                                      twig

     <...
PHP
     <a href="<?php
     echo $view->router->generate('portada')
     ?>">
     Volver a la portada
     </a>


      ...
PHP
  <?php foreach ($ofertas as $id => $oferta): ?>
    <h2><?php echo $oferta['titulo'] ?></h2>
    <p><?php echo $ofert...
twig
                   ! Código conciso
                   ! Diseñadores
                   ! Ultra-rápido
Jornadas Symfo...
El controlador



Jornadas Symfony                    http://decharlas.uji.es/symfony
routing.yml      1.x   routing.yml                   2.x

                          bundle   bundle




                  ...
apps/frontend/config/config.yml                             1.x

  homepage:
    url:    /
    param: { module: default, a...
homepage:
    pattern: /
    defaults: { _bundle: FoundationBundle ,
              _controller: Default, _action: index }
...
frontend/config/routing.yml                            2.x


   homepage:
     pattern: /
     defaults: { _controller:
  ...
oferta:
      pattern:     /ofertas/:id
      ...




  public function ofertaAction($id)
  {
       ...
  }




Jornadas ...
oferta:
      pattern:     /ofertas/:seccion/:categoria
      ...




  public function ofertaAction($seccion, $categoria)...
public function indexAction()
                                                            1.x
  {
    $this->ofertas = $of...
Formularios



Jornadas Symfony                 http://decharlas.uji.es/symfony
1.x


                       Form
                   sfForm     Controlador   Modelo
                                     ...
1.x


                   sfForm    Controlador         Modelo




                                                        ...
$form = new Form('cliente', $cliente);


         $form->add(new TextField('nombre'));
         $form->add(new TextField('...
TextField

               TextareaField

              CheckboxField

                   ChoiceField

              Passwo...
$form->add(new RepeatedField(
                     new PasswordField('contrasena'))
                   ));



            ...
$form->add(new CollectionField(
                     new TextField('telefonos'))
                   ));



               ...
$direccion = new FieldGroup('direccion');
      $direccion->add(new TextField('calle'));
      $direccion->add(new TextFie...
TextField    RepeatedField

               TextareaField     CollectionField

              CheckboxField       FieldGroup...
i18n
                    TextField    RepeatedField           MoneyField
                                                 ...
Validación



Jornadas Symfony                http://decharlas.uji.es/symfony
1.x                       2.x

                     sfForm
                     Form
                   sfValidator



   ...
1.x                            2.x

                     sfForm
                      Form
                    Validador
 ...
ApplicationFrontendBundleModelCliente:
          properties:
            nombre:
              - MinLength: 3
            ...
class Cliente
        {
            public $nombre;

                   public $fecha_nacimiento;

                   publ...
class Cliente
        {
            /** @Validation({ @MinLength(3) }) */
            public $nombre;

                   ...
JSR 303 Bean Validation
                   Validating data is a common task that occurs throughout an
                   a...
$validador = $this->container->getService(
                   'validator'
      );


      $form = new Form(
             ...
Pruebas unitarias y
                      funcionales


Jornadas Symfony                     http://decharlas.uji.es/symfo...
PHPUnit 3.5

Jornadas Symfony             http://decharlas.uji.es/symfony
src/
          Application/
            FrontendBundle/
              Model/
                Article.php
              Tes...
> phpunit -c frontend/



     > phpunit -c frontend/ src/Application/
     FrontendBundle/




Jornadas Symfony          ...
> phpunit -c frontend/




Jornadas Symfony          http://decharlas.uji.es/symfony
> phpunit -c frontend/




Jornadas Symfony          http://decharlas.uji.es/symfony
Estándares



Jornadas Symfony                http://decharlas.uji.es/symfony
1.x                                2.x

     sfCache             Zend_Cache
    sfLogger             Zend_Logger
  sfValid...
completo modular
             fácil
    estándar xxxxxx
Jornadas Symfony   http://decharlas.uji.es/symfony
Rendimiento



Jornadas Symfony                 http://decharlas.uji.es/symfony
100
                   veces más rápido
                    que symfony 1


Jornadas Symfony                      http://d...
depende de
                                          l tipo
                                de benchm
                    ...
3x
                   3x
                   4x

                   6x
Jornadas Symfony        http://decharlas.uji.es/symf...
! Utiliza PHP 5.3.2




Jornadas Symfony           http://decharlas.uji.es/symfony
20 %

Jornadas Symfony          http://decharlas.uji.es/symfony
! Utiliza PHP 5.3.2
     ! lazy-loading




Jornadas Symfony           http://decharlas.uji.es/symfony
autoloader             servicios
              PHP 5.3        listeners
          interoperability
             standard  ...
! Utiliza PHP 5.3.2
     ! lazy-loading
     ! cache


Jornadas Symfony           http://decharlas.uji.es/symfony
cache/
           frontendDevDebugProjectContainer.meta
           frontendDevDebugProjectContainer.php
           fronten...
! Utiliza PHP 5.3.2
     ! lazy-loading
     ! cache
     ! otros

Jornadas Symfony           http://decharlas.uji.es/symf...
> route:dump


     RewriteCond %{PATH_INFO} ^/$
     RewriteRule .* index.php
     [QSA,L,E=_ROUTING__route:portada,E=_RO...
! Utiliza PHP 5.3.2
     ! lazy-loading
     ! cache
     ! otros
     ! acelerador web
Jornadas Symfony           http://...
Apache




Jornadas Symfony            http://decharlas.uji.es/symfony
Squid Apache




Jornadas Symfony           http://decharlas.uji.es/symfony
Squid Apache




Jornadas Symfony           http://decharlas.uji.es/symfony
Symfony2 incluye
                   un acelerador web
                    creado con PHP

Jornadas Symfony                ...
Apache   Acelerador Aplicación




Jornadas Symfony                        http://decharlas.uji.es/symfony
El acelerador
                   guarda en la cache
                   páginas completas

Jornadas Symfony                ...
$respuesta->setExpires(...);
   $respuesta->setMaxAge(...);
   $respuesta->setTtl(...);
   $respuesta->setLastModified(......
public function indexAction()
           {
               $respuesta = $this->render(
                   'FrontendBundle:D...
El acelerador minimiza
           las veces que se
        ejecuta la aplicación

Jornadas Symfony         http://decharla...
Jornadas Symfony   http://decharlas.uji.es/symfony
180 minutos
                               1 minuto
                   5 minutos
      180            1 minuto   5 minutos...
ESI Language Specification 1.0
      Edge Side Includes (ESI) is an XML-based markup language that
      provides a means ...
...

      <?php $view->actions->render(
        'BolsaBundle::cotizaciones'
      ) ?>

      ...

Jornadas Symfony      ...
...

      <?php $view->actions->render(
        'BolsaBundle::cotizaciones',
        array('standalone' => true)
      ) ...
<esi:include src="..." />




Jornadas Symfony                          http://decharlas.uji.es/symfony
! Utiliza PHP 5.3.2
     ! lazy-loading
     ! cache
     ! otros
     ! acelerador web
Jornadas Symfony           http://...
100
                   veces más rápido
                    que symfony 1


Jornadas Symfony                      http://d...
EXCLUSIVO
                   EXCLUSIVO
   EXCLUSIVO                         EXCLUSIVO



                                 ...
completo modular
             fácil
    estándar rápido
Jornadas Symfony   http://decharlas.uji.es/symfony
50%
                   menos memoria que
                       symfony 1


Jornadas Symfony                       http://...
Y mucho más...



Jornadas Symfony                    http://decharlas.uji.es/symfony
Symfony2 está
                   !   siendo desarrollado
                       en estos momentos


Jornadas Symfony      ...
autoloading        eventos          bundles

                      cache          formularios       doctrine

            ...
primera versión alpha
                   septiembre

Jornadas Symfony                       http://decharlas.uji.es/symfony
lanzamiento previsto
                   finales 2010

Jornadas Symfony                      http://decharlas.uji.es/symfony
Muchas gracias

Jornadas Symfony    http://decharlas.uji.es/symfony
Preguntas
                   javier.eguiluz@gmail.com

Jornadas Symfony                         http://decharlas.uji.es/sy...
Upcoming SlideShare
Loading in...5
×

Symfony2, Jornadas Symfony

7,013

Published on

Esta presentación es la versión simplificada de la que se utilizó en las primeras Jornadas Symfony. Puedes ver la grabación en vídeo de la presentación original en http://bit.ly/symfony2

- - - - - - -


This is the simplified version of the presentation used at the first Spanish Symfony Conference. You can watch the video recording of the original presentation at http://bit.ly/symfony2

Published in: Technology

Transcript of "Symfony2, Jornadas Symfony"

  1. 1. Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I, Castellón http://decharlas.uji.es/symfony organizan patrocinan colaboran
  2. 2. NOTA Esta presentación es la versión simplificada de la que se utilizó en las primeras Jornadas Symfony. La presentación original está llena de efectos gráficos y animaciones imposibles de utilizar en slideshare.net Puedes ver la grabación en vídeo de la presentación original en http://bit.ly/symfony2 Jornadas Symfony http://decharlas.uji.es/symfony
  3. 3. NOTE This is the simplified version of the presentation used at the first Spanish Symfony Conference. The original presentation includes lots of cool effects and animations that cannot be exported to slideshare.net You can watch the video recording of the original presentation at http://bit.ly/symfony2 Jornadas Symfony http://decharlas.uji.es/symfony
  4. 4. Symfony 2 Javier Eguíluz, symfony.es Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I, Castellón http://decharlas.uji.es/symfony
  5. 5. sesión patrocinada por www.ideatea.com Jornadas Symfony http://decharlas.uji.es/symfony
  6. 6. ¿Qué es Symfony 2? Jornadas Symfony http://decharlas.uji.es/symfony
  7. 7. symfony Jornadas Symfony http://decharlas.uji.es/symfony
  8. 8. Symfony2 Jornadas Symfony http://decharlas.uji.es/symfony
  9. 9. ¿En qué se diferencian sf 1 y sf2? Jornadas Symfony http://decharlas.uji.es/symfony
  10. 10. en todo Jornadas Symfony http://decharlas.uji.es/symfony
  11. 11. en casi todo Jornadas Symfony http://decharlas.uji.es/symfony
  12. 12. La evolución de Symfony Jornadas Symfony http://decharlas.uji.es/symfony
  13. 13. sf 1.0 2007 symfony Jornadas Symfony http://decharlas.uji.es/symfony
  14. 14. sf 1.2 2008 sfRequest sfRouting sfLogger sfI18N sfUser sfResponse sfYAML sfDatabase sfForm sfStorage sfCache sfWidget sfValidator sfEventDispatcher symfony sfOutputEscaper sfCoreAutoload Jornadas Symfony http://decharlas.uji.es/symfony
  15. 15. sf 1.4 2009 symfony Jornadas Symfony http://decharlas.uji.es/symfony
  16. 16. ¿Por qué reescribirlo todo de nuevo? Jornadas Symfony http://decharlas.uji.es/symfony
  17. 17. Problemas Muchos archivos Configuración Difícil de aprender Formularios LENTO :) Jornadas Symfony http://decharlas.uji.es/symfony
  18. 18. Nuestro primer proyecto Symfony2 Jornadas Symfony http://decharlas.uji.es/symfony
  19. 19. 5.3.2 subversion Jornadas Symfony http://decharlas.uji.es/symfony
  20. 20. > git clone http://github.com/symfony/ symfony-sandbox.git Jornadas Symfony http://decharlas.uji.es/symfony
  21. 21. 1.x symfony 1.4 8.5 MB sandbox 3.919 archivos 2.x Symfony2 3 MB sandbox 2.244 archivos Jornadas Symfony http://decharlas.uji.es/symfony
  22. 22. Demo Jornadas Symfony http://decharlas.uji.es/symfony
  23. 23. > php hello/console -s > init:app frontend frontend/ web/ --yaml > init:bundle Application/ FrontendBundle Jornadas Symfony http://decharlas.uji.es/symfony
  24. 24. El código fuente Jornadas Symfony http://decharlas.uji.es/symfony
  25. 25. 1.x 2.x <?php <?php class sfFilesystem class Filesystem { { public function mkdirs($path, $mode = 0777) public function mkdirs($path, $mode = 0777) { { if (is_dir($path)) if (is_dir($path)) { { return true; return true; } } return @mkdir($path, $mode, true); return @mkdir($path, $mode, true); } } public function touch($files) public function touch($files) { { if (!is_array($files)) { if (!is_array($files)) $files = array($files); { } $files = array($files); } foreach ($files as $file) { touch($file); foreach ($files as $file) } { } touch($file); } } Jornadas Symfony http://decharlas.uji.es/symfony
  26. 26. 1.x 2.x <?php <?php class sfFilesystem class Filesystem { { public function mkdirs($path, $mode = 0777) public function mkdirs($path, $mode = 0777) { { if (is_dir($path)) if (is_dir($path)) { { return true; return true; } } EAR return @mkdir($path, $mode, true); /P return @mkdir($path, $mode, true); } end } Z public function touch($files) public function touch($files) { { if (!is_array($files)) { if (!is_array($files)) $files = array($files); { } $files = array($files); } foreach ($files as $file) { touch($file); foreach ($files as $file) } { } touch($file); } } Jornadas Symfony http://decharlas.uji.es/symfony
  27. 27. 1.x 2.x <?php <?php class sfFilesystem class Filesystem { { public function mkdirs($path, $mode = 0777) public function mkdirs($path, $mode = 0777) { { if (is_dir($path)) if (is_dir($path)) { { return true; return true; } } return @mkdir($path, $mode, true); 2 espacios 4 espacios return @mkdir($path, $mode, true); } } public function touch($files) public function touch($files) { { if (!is_array($files)) { if (!is_array($files)) $files = array($files); { } $files = array($files); } foreach ($files as $file) { touch($file); foreach ($files as $file) } { } touch($file); } } Jornadas Symfony http://decharlas.uji.es/symfony
  28. 28. 1.x 2.x <?php <?php class sfFilesystem class Filesystem { { public function mkdirs($path, $mode = 0777) public function mkdirs($path, $mode = 0777) { { if (is_dir($path)) if (is_dir($path)) { { return true; if ( ) return true; } } if ( ) { return @mkdir($path, $mode, true); } { return @mkdir($path, $mode, true); } ... ... public function touch($files) } public function touch($files) { { if (!is_array($files)) { { } if (!is_array($files)) $files = array($files); } $files = array($files); } foreach ($files as $file) { touch($file); foreach ($files as $file) } { } touch($file); } } Jornadas Symfony http://decharlas.uji.es/symfony
  29. 29. <?php namespace SymfonyFrameworkFoundationBundle; use SymfonyComponents...ContainerInterface; use SymfonyComponentsHttpKernelRequest; use SymfonyComponentsHttpKernelResponse; use SymfonyComponents...HttpKernelInterface; class Controller { protected $container; protected $request; ... Jornadas Symfony http://decharlas.uji.es/symfony
  30. 30. namespaces Jornadas Symfony http://decharlas.uji.es/symfony
  31. 31. class Migration { ... } class Migration { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  32. 32. class sfMigration { ... } class Doctrine_Migration { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  33. 33. namespace Symfony; class Migration { ... } namespace Doctrine; class Migration { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  34. 34. namespace Symfony; namespace Doctrine; class Migration class Migration { { ... ... } } $migracion = new SymfonyMigration(); $migracion = new DoctrineMigration(); Jornadas Symfony http://decharlas.uji.es/symfony
  35. 35. SymfonyComponents SymfonyFramework SymfonyFoundation Jornadas Symfony http://decharlas.uji.es/symfony
  36. 36. SymfonyComponents BrowserKit Console CssSelector DependencyInjection DomCrawler EventDispatcher File Finder Form HttpKernel I18N OutputEscaper Process Routing Templating Validator Yaml Jornadas Symfony http://decharlas.uji.es/symfony
  37. 37. completo xxxxxx xxxxx xxxxxxxx xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  38. 38. Estructura del proyecto Jornadas Symfony http://decharlas.uji.es/symfony
  39. 39. 1.x 2.x mi_proyecto/ mi_proyecto/ apps/ frontend/ frontend/ src/ cache/ web/ config/ data/ lib/ log/ plugins/ test/ web/ Jornadas Symfony http://decharlas.uji.es/symfony
  40. 40. mi_proyecto/ frontend/ src/ web/ Jornadas Symfony http://decharlas.uji.es/symfony
  41. 41. mi_proyecto/frontend/ frontendKernel.php Jornadas Symfony http://decharlas.uji.es/symfony
  42. 42. mi_proyecto/frontend/ frontendKernel.php cache/ logs/ config/ Jornadas Symfony http://decharlas.uji.es/symfony
  43. 43. mi_proyecto/frontend/ frontendKernel.php cache/ logs/ config/ routing.yml config.yml config_dev.yml config_prod.yml Jornadas Symfony http://decharlas.uji.es/symfony
  44. 44. 1.x 2.x 7 archivos 3 archivos 124 líneas 35 líneas Jornadas Symfony http://decharlas.uji.es/symfony
  45. 45. mi_proyecto/ frontend/ src/ web/ Jornadas Symfony http://decharlas.uji.es/symfony
  46. 46. mi_proyecto/src/ autoload.php Jornadas Symfony http://decharlas.uji.es/symfony
  47. 47. mi_proyecto/src/ autoload.php Application/ Bundle/ vendor/ Jornadas Symfony http://decharlas.uji.es/symfony
  48. 48. mi_proyecto/src/ autoload.php Application/ Bundle/ vendor/ symfony/ doctrine/ zend/ Jornadas Symfony http://decharlas.uji.es/symfony
  49. 49. mi_proyecto/src/ autoload.php Application/ FrontendBundle/ Bundle/ vendor/ symfony/ doctrine/ zend/ Jornadas Symfony http://decharlas.uji.es/symfony
  50. 50. 1.x 2.x Proyecto Proyecto Aplicación Aplicación Módulo Bundle Jornadas Symfony http://decharlas.uji.es/symfony
  51. 51. Aplicación 1 Proyecto Módulo 2 Plugins Módulo 1 Módulo 3 Plugin 1 Aplicación 2 Plugin 2 Módulo 4 Módulo 5 Plugin 3 Jornadas Symfony http://decharlas.uji.es/symfony
  52. 52. Aplicación 1 Proyecto Aplicación 2 Módulo 1 Módulo 2 Módulo 3 Módulo 4 Módulo 5 Plugin 1 Plugin 2 Plugin 3 Jornadas Symfony http://decharlas.uji.es/symfony
  53. 53. Aplicación 1 Proyecto Aplicación 2 Bundle 1 Bundle 2 Bundle 3 Bundle 4 Bundle 5 Bundle 6 Bundle 7 Bundle 8 Jornadas Symfony http://decharlas.uji.es/symfony
  54. 54. Bundles (paquetes) Jornadas Symfony http://decharlas.uji.es/symfony
  55. 55. « Un bundle es un conjunto de archivos que implementan una funcionalidad » Jornadas Symfony http://decharlas.uji.es/symfony
  56. 56. Proyecto 1.x jobeet Aplicaciones frontend, backend Módulos oferta, categoría, empresa Jornadas Symfony http://decharlas.uji.es/symfony
  57. 57. Proyecto 2.x jobeet Aplicaciones frontend, backend Bundle frontend, backend Jornadas Symfony http://decharlas.uji.es/symfony
  58. 58. Proyecto 2.x jobeet Aplicaciones frontend, backend Bundle oferta, categoría, empresa Jornadas Symfony http://decharlas.uji.es/symfony
  59. 59. Proyecto 2.x jobeet Aplicaciones frontend, backend Bundle frontend, backend, oferta, categoría, empresa Jornadas Symfony http://decharlas.uji.es/symfony
  60. 60. 1.x 2.x Aplicación Módulo Bundle Plugin Librerías Jornadas Symfony http://decharlas.uji.es/symfony
  61. 61. mi_proyecto/src/ autoload.php Application/ FrontendBundle/ Bundle/ vendor/ Jornadas Symfony http://decharlas.uji.es/symfony
  62. 62. mi_proyecto/src/Application/ FrontendBundle/ Controller/ Resources/ Jornadas Symfony http://decharlas.uji.es/symfony
  63. 63. mi_proyecto/src/Application/ FrontendBundle/ Controller/ DefaultController.php Resources/ Jornadas Symfony http://decharlas.uji.es/symfony
  64. 64. mi_proyecto/src/Application/ FrontendBundle/ Controller/ DefaultController.php Resources/ config/ views/ Jornadas Symfony http://decharlas.uji.es/symfony
  65. 65. mi_proyecto/src/Application/ FrontendBundle/ Controller/ DefaultController.php Resources/ config/ routing.yml views/ index.php Jornadas Symfony http://decharlas.uji.es/symfony
  66. 66. twig Jornadas Symfony http://decharlas.uji.es/symfony
  67. 67. PropelBundle/ Command/ DependencyInjection/ Logger/ Resources/ Tests/ Jornadas Symfony http://decharlas.uji.es/symfony
  68. 68. TwigBundle/ DependencyInjection/ Extension/ Loader/ Renderer/ Resources/ Tests/ TokenParsers/ Jornadas Symfony http://decharlas.uji.es/symfony
  69. 69. Jornadas Symfony http://decharlas.uji.es/symfony
  70. 70. completo modular xxxxx xxxxxxxx xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  71. 71. Inyección de Dependencias Jornadas Symfony http://decharlas.uji.es/symfony
  72. 72. Inyección de Dependencias DI Inversion of Control IoC Jornadas Symfony http://decharlas.uji.es/symfony
  73. 73. Inyección de Dependencias DI Jornadas Symfony http://decharlas.uji.es/symfony
  74. 74. 1.x 2.x sfConfig sfProjectConfiguration sfAppConfiguration sfContext DI config handlers ... Jornadas Symfony http://decharlas.uji.es/symfony
  75. 75. Problema ¿Cómo configuro un objeto mailer para enviar emails desde mis aplicaciones? Jornadas Symfony http://decharlas.uji.es/symfony
  76. 76. public function emailAction() { $mailer = $this->getMailer(); $mensaje = Swift_Message::newInstance() ->setSubject('Asunto') ->setFrom('remitente@ejemplo.com') ->setTo('destinatario@ejemplo.com') ->setBody('Cuerpo'); $mailer->send($mensaje); ... } Jornadas Symfony http://decharlas.uji.es/symfony
  77. 77. class Mailer { function __construct() { $this->setUsername('xxxxxxxx') $this->setPassword('xxxxxxxx'); } } $mailer = $this->getMailer(); Jornadas Symfony http://decharlas.uji.es/symfony
  78. 78. class Mailer { function __construct() { $this->setUsername(MAILER_USERNAME) $this->setPassword(MAILER_PASSWORD); } } define('MAILER_USERNAME', 'xxxxxxxx'); define('MAILER_PASSWORD', 'xxxxxxxx'); $mailer = $this->getMailer(); Jornadas Symfony http://decharlas.uji.es/symfony
  79. 79. class Mailer { function __construct($user, $pass) { $this->setUsername($user) $this->setPassword($pass); } } $mailer = $this->getMailer('xxxx', 'xxxx'); Jornadas Symfony http://decharlas.uji.es/symfony
  80. 80. class Mailer { function __construct($transport) { $this->transport = $transport; } } $transport = new SMTP_Gmail($user, $pass); $mailer = $this->getMailer($transport); Jornadas Symfony http://decharlas.uji.es/symfony
  81. 81. DIC Jornadas Symfony http://decharlas.uji.es/symfony
  82. 82. D ependency I njection C ontainer Jornadas Symfony http://decharlas.uji.es/symfony
  83. 83. DIC = configuración flexible Jornadas Symfony http://decharlas.uji.es/symfony
  84. 84. frontend/config/config.yml swift.mailer: transport: gmail username: xxxxxxxx password: xxxxxxxx src/FrontendBundle/Controller/DefaultController.php public function emailAction() { $mailer = $this->getMailer(); $mensaje = Swift_Message::newInstance() ->setSubject('Asunto') ->... Jornadas Symfony http://decharlas.uji.es/symfony
  85. 85. DIC ! Objetos globales " Modelo " Tus clases Jornadas Symfony http://decharlas.uji.es/symfony
  86. 86. El modelo Jornadas Symfony http://decharlas.uji.es/symfony
  87. 87. Jornadas Symfony http://decharlas.uji.es/symfony
  88. 88. Jornadas Symfony http://decharlas.uji.es/symfony
  89. 89. ORM DBAL PDO Jornadas Symfony http://decharlas.uji.es/symfony
  90. 90. ORM ODM Jornadas Symfony http://decharlas.uji.es/symfony
  91. 91. Object Document Mapper Jornadas Symfony http://decharlas.uji.es/symfony
  92. 92. NoSQL Jornadas Symfony http://decharlas.uji.es/symfony
  93. 93. NoSQL Jornadas Symfony http://decharlas.uji.es/symfony
  94. 94. Jornadas Symfony http://decharlas.uji.es/symfony
  95. 95. doctrine:ensure-production-settings doctrine:cache:clear-metadata doctrine:cache:clear-query doctrine:clear-result doctrine:data:load doctrine:database:create doctrine:database:drop doctrine:generate:entities doctrine:generate:entity doctrine:generate:proxies doctrine:generate:repositories Jornadas Symfony http://decharlas.uji.es/symfony
  96. 96. doctrine:mapping:convert doctrine:mapping:convert-d1-schema doctrine:mapping:import doctrine:query:dql doctrine:query:sql doctrine:schema:create doctrine:schema:drop doctrine:schema:update Jornadas Symfony http://decharlas.uji.es/symfony
  97. 97. class DefaultController extends Controller { public function indexAction() { $conexion = $this->container->getService( 'database_connection' ); $ofertas = $conexion->fetchAll( 'SELECT * FROM ofertas' ); ... } } Jornadas Symfony http://decharlas.uji.es/symfony
  98. 98. class DefaultController extends Controller { public function modificarAction() { $orm = $this->getEntityManager(); $oferta = new Oferta(); $oferta->setTitulo('Programador Senior'); $orm->persist($oferta); $orm->flush(); ... } } Jornadas Symfony http://decharlas.uji.es/symfony
  99. 99. class DefaultController extends Controller { public function modificarAction() { $odm = $this->getDocumentManager(); $oferta = new Oferta(); $oferta->setTitulo('Programador Senior'); $odm->persist($oferta); $odm->flush(); ... } } Jornadas Symfony http://decharlas.uji.es/symfony
  100. 100. La Vista Jornadas Symfony http://decharlas.uji.es/symfony
  101. 101. 1.x 2.x slot layout partial plantilla plantilla slot component component slot Jornadas Symfony http://decharlas.uji.es/symfony
  102. 102. 1.x 2.x slot slot layout plantilla + slot partial plantilla plantilla plantilla component plantilla + acción component slot plantilla + acción Jornadas Symfony http://decharlas.uji.es/symfony
  103. 103. completo modular fácil xxxxxxxx xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  104. 104. 1.x <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php echo $sf_content ?> </body> </html> Jornadas Symfony http://decharlas.uji.es/symfony
  105. 105. 2.x <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php $view->slots->output('_content') ?> </body> </html> Jornadas Symfony http://decharlas.uji.es/symfony
  106. 106. <?php $view->extend( 'FrontendBundle:Default:layout' ); ?> <h1><?php echo $oferta['titulo'] ?></h1> <p><?php echo $oferta['descripcion'] ?></p> ... Jornadas Symfony http://decharlas.uji.es/symfony
  107. 107. $view->extend('FrontendBundle:Default:layout'); src/ Application/ FrontendBundle/ Resources/ views/ Default/ layout.php Jornadas Symfony http://decharlas.uji.es/symfony
  108. 108. $view->extend('FrontendBundle::layout'); src/ Application/ FrontendBundle/ Resources/ views/ layout.php Jornadas Symfony http://decharlas.uji.es/symfony
  109. 109. $view->extend('PlantillasBundle::layout'); src/ Bundle/ PlantillasBundle/ Resources/ views/ layout.php Jornadas Symfony http://decharlas.uji.es/symfony
  110. 110. $view->extend( 'PlantillasBundle::layout_pagina' ); Jornadas Symfony http://decharlas.uji.es/symfony
  111. 111. $view->extend( 'PlantillasBundle::layout_seccion' ); Jornadas Symfony http://decharlas.uji.es/symfony
  112. 112. $view->extend( 'PlantillasBundle::layout' ); Jornadas Symfony http://decharlas.uji.es/symfony
  113. 113. echo $view->render( 'SitioBundle::buscador' ) ... echo $view->render( 'NoticiasBundle:Default:ultimaHora', array('noticias' => $noticias) ) Jornadas Symfony http://decharlas.uji.es/symfony
  114. 114. echo $view->actions->output( 'BolsaBundle:Cotizaciones:indices', array('indice' => 'IBEX35') ) ... echo $view->actions->output( 'ContenidosBundle:Noticias:ultimaHora' ) Jornadas Symfony http://decharlas.uji.es/symfony
  115. 115. $view->extend(...) $view->render(...) $view->actions->output(...) Jornadas Symfony http://decharlas.uji.es/symfony
  116. 116. Helpers Jornadas Symfony http://decharlas.uji.es/symfony
  117. 117. Los helpers de Symfony2 son objetos Jornadas Symfony http://decharlas.uji.es/symfony
  118. 118. <a href="<?php echo $view->router->generate('portada') ?>"> Portada </a> Jornadas Symfony http://decharlas.uji.es/symfony
  119. 119. 1.x <?php include_stylesheets() ?> <?php use_stylesheet('main.css') ?> 2.x <?php echo $view->stylesheets ?> <?php $view->stylesheets->add('main.css') ?> Jornadas Symfony http://decharlas.uji.es/symfony
  120. 120. «We're trading line length for lower [code] complexity» David Heinemeier RailsConf 2010 Jornadas Symfony http://decharlas.uji.es/symfony
  121. 121. Plantillas avanzadas Jornadas Symfony http://decharlas.uji.es/symfony
  122. 122. twig Jornadas Symfony http://decharlas.uji.es/symfony
  123. 123. PHP <h1><?php echo $oferta['titulo'] ?></h1> twig <h1>{{ oferta.titulo }}</h1> Jornadas Symfony http://decharlas.uji.es/symfony
  124. 124. PHP <a href="<?php echo $view->router->generate('portada') ?>"> Volver a la portada </a> twig <a href="{% route 'portada' %}"> Volver a la portada </a> Jornadas Symfony http://decharlas.uji.es/symfony
  125. 125. PHP <?php foreach ($ofertas as $id => $oferta): ?> <h2><?php echo $oferta['titulo'] ?></h2> <p><?php echo $oferta['descripcion'] ?></p> ... <?php endforeach ?> twig {% for oferta in ofertas %} <h2>{{ oferta.titulo }}</h2> <p>{{ oferta.descripcion }}</p> ... {% endfor %} Jornadas Symfony http://decharlas.uji.es/symfony
  126. 126. twig ! Código conciso ! Diseñadores ! Ultra-rápido Jornadas Symfony http://decharlas.uji.es/symfony
  127. 127. El controlador Jornadas Symfony http://decharlas.uji.es/symfony
  128. 128. routing.yml 1.x routing.yml 2.x bundle bundle bundle bundle Jornadas Symfony http://decharlas.uji.es/symfony
  129. 129. apps/frontend/config/config.yml 1.x homepage: url: / param: { module: default, action: index } frontend/config/config.yml 2.x homepage: pattern: / defaults: { _bundle: FoundationBundle , _controller: Default, _action: index } Jornadas Symfony http://decharlas.uji.es/symfony
  130. 130. homepage: pattern: / defaults: { _bundle: FoundationBundle , _controller: Default, _action: index } homepage: pattern: / defaults: { _controller: FoundationBundle:Default:index } Jornadas Symfony http://decharlas.uji.es/symfony
  131. 131. frontend/config/routing.yml 2.x homepage: pattern: / defaults: { _controller: FoundationBundle:Default:index } frontend: resource: FrontendBundle/Resources/ config/routing.yml Jornadas Symfony http://decharlas.uji.es/symfony
  132. 132. oferta: pattern: /ofertas/:id ... public function ofertaAction($id) { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  133. 133. oferta: pattern: /ofertas/:seccion/:categoria ... public function ofertaAction($seccion, $categoria) { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  134. 134. public function indexAction() 1.x { $this->ofertas = $ofertas; } *Se supone que la plantilla es indexSuccess.php public function indexAction() { 2.x return $this->render( 'FrontendBundle:Default:index', array('ofertas' => $ofertas) ); } Jornadas Symfony http://decharlas.uji.es/symfony
  135. 135. Formularios Jornadas Symfony http://decharlas.uji.es/symfony
  136. 136. 1.x Form sfForm Controlador Modelo Modelo 2.x Jornadas Symfony http://decharlas.uji.es/symfony
  137. 137. 1.x sfForm Controlador Modelo 2.x Form Modelo Jornadas Symfony http://decharlas.uji.es/symfony
  138. 138. $form = new Form('cliente', $cliente); $form->add(new TextField('nombre')); $form->add(new TextField('apellidos')); $form->add(new TextareaField('direccion')); Jornadas Symfony http://decharlas.uji.es/symfony
  139. 139. TextField TextareaField CheckboxField ChoiceField PasswordField HiddenField Jornadas Symfony http://decharlas.uji.es/symfony
  140. 140. $form->add(new RepeatedField( new PasswordField('contrasena')) )); Contraseña Repite la contraseña Jornadas Symfony http://decharlas.uji.es/symfony
  141. 141. $form->add(new CollectionField( new TextField('telefonos')) )); Teléfono 1 Teléfono 2 Teléfono 3 Jornadas Symfony http://decharlas.uji.es/symfony
  142. 142. $direccion = new FieldGroup('direccion'); $direccion->add(new TextField('calle')); $direccion->add(new TextField('numero')); $direccion->add(new TextField('piso')); $direccion->add(new TextField('cp')); $form->add($direccion); Dirección Calle Número Piso CP Jornadas Symfony http://decharlas.uji.es/symfony
  143. 143. TextField RepeatedField TextareaField CollectionField CheckboxField FieldGroup ChoiceField PasswordField HiddenField Jornadas Symfony http://decharlas.uji.es/symfony
  144. 144. i18n TextField RepeatedField MoneyField i18n TextareaField CollectionField DateField i18n CheckboxField FieldGroup BirthdayField i18n i18n ChoiceField NumberField TimeField i18n i18n PasswordField IntegerField DateTimeField i18n i18n HiddenField PercentField TimezoneField Jornadas Symfony http://decharlas.uji.es/symfony
  145. 145. Validación Jornadas Symfony http://decharlas.uji.es/symfony
  146. 146. 1.x 2.x sfForm Form sfValidator Validador Controlador Modelo Modelo Jornadas Symfony http://decharlas.uji.es/symfony
  147. 147. 1.x 2.x sfForm Form Validador sfValidator Form Controlador Validador Modelo Modelo Jornadas Symfony http://decharlas.uji.es/symfony
  148. 148. ApplicationFrontendBundleModelCliente: properties: nombre: - MinLength: 3 fecha_nacimiento: - Date: ~ codigo_postal: - MaxLength: 5 Jornadas Symfony http://decharlas.uji.es/symfony
  149. 149. class Cliente { public $nombre; public $fecha_nacimiento; public $codigo_postal; } Jornadas Symfony http://decharlas.uji.es/symfony
  150. 150. class Cliente { /** @Validation({ @MinLength(3) }) */ public $nombre; /** @Validation({ @Date }) */ public $fecha_nacimiento; /** @Validation({ @MaxLength(5) }) */ public $codigo_postal; } Jornadas Symfony http://decharlas.uji.es/symfony
  151. 151. JSR 303 Bean Validation Validating data is a common task that occurs throughout an application, from the presentation layer to the persistence layer. Often the same validation logic is implemented in each layer, proving to be time consuming and error-prone. To avoid duplication of these validations in each layer, developers often bundle validation logic directly into the domain model, cluttering domain classes with validation code that is, in fact, metadata about the class itself. This JSR defines a metadata model and API for JavaBean validation. The default metadata source is annotations, with the ability to override and extend the meta-data through the use of XML validation descriptors. The validation API developed by this JSR is not intended for use in any one tier or programming model. It is specifically not tied to either the web tier or the persistence tier, and is available for both server-side application programming, as well as rich client Swing application developers. This API is seen as a general extension to the Java-Beans object model, and as such is expected to be used as a core component Jornadas Symfony http://decharlas.uji.es/symfony
  152. 152. $validador = $this->container->getService( 'validator' ); $form = new Form( 'cliente', $cliente, $validador ); Jornadas Symfony http://decharlas.uji.es/symfony
  153. 153. Pruebas unitarias y funcionales Jornadas Symfony http://decharlas.uji.es/symfony
  154. 154. PHPUnit 3.5 Jornadas Symfony http://decharlas.uji.es/symfony
  155. 155. src/ Application/ FrontendBundle/ Model/ Article.php Tests/ Model/ ArticleTest.php Jornadas Symfony http://decharlas.uji.es/symfony
  156. 156. > phpunit -c frontend/ > phpunit -c frontend/ src/Application/ FrontendBundle/ Jornadas Symfony http://decharlas.uji.es/symfony
  157. 157. > phpunit -c frontend/ Jornadas Symfony http://decharlas.uji.es/symfony
  158. 158. > phpunit -c frontend/ Jornadas Symfony http://decharlas.uji.es/symfony
  159. 159. Estándares Jornadas Symfony http://decharlas.uji.es/symfony
  160. 160. 1.x 2.x sfCache Zend_Cache sfLogger Zend_Logger sfValidator Java JSR 303 autoload PHP 5.3 autoload lime PHPUnit Jornadas Symfony http://decharlas.uji.es/symfony
  161. 161. completo modular fácil estándar xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  162. 162. Rendimiento Jornadas Symfony http://decharlas.uji.es/symfony
  163. 163. 100 veces más rápido que symfony 1 Jornadas Symfony http://decharlas.uji.es/symfony
  164. 164. depende de l tipo de benchm ark 100 veces más rápido que symfony 1 Jornadas Symfony http://decharlas.uji.es/symfony
  165. 165. 3x 3x 4x 6x Jornadas Symfony http://decharlas.uji.es/symfony
  166. 166. ! Utiliza PHP 5.3.2 Jornadas Symfony http://decharlas.uji.es/symfony
  167. 167. 20 % Jornadas Symfony http://decharlas.uji.es/symfony
  168. 168. ! Utiliza PHP 5.3.2 ! lazy-loading Jornadas Symfony http://decharlas.uji.es/symfony
  169. 169. autoloader servicios PHP 5.3 listeners interoperability standard helpers Jornadas Symfony http://decharlas.uji.es/symfony
  170. 170. ! Utiliza PHP 5.3.2 ! lazy-loading ! cache Jornadas Symfony http://decharlas.uji.es/symfony
  171. 171. cache/ frontendDevDebugProjectContainer.meta frontendDevDebugProjectContainer.php frontendUrlGenerator.meta frontendUrlGenerator.php frontendUrlMatcher.meta frontendUrlMatcher.php __TwigTemplate_a242fa75a6db74398d3e6.php Jornadas Symfony http://decharlas.uji.es/symfony
  172. 172. ! Utiliza PHP 5.3.2 ! lazy-loading ! cache ! otros Jornadas Symfony http://decharlas.uji.es/symfony
  173. 173. > route:dump RewriteCond %{PATH_INFO} ^/$ RewriteRule .* index.php [QSA,L,E=_ROUTING__route:portada,E=_ROUTING__c ontroller:FrontendBundle:Default:index] RewriteCond %{PATH_INFO} ^/ofertas/([^/.]+?)$ RewriteRule .* index.php [QSA,L,E=_ROUTING__route:oferta,E=_ROUTING_id: %1,E=_ROUTING__controller:FrontendBundle:Defau lt:oferta] Jornadas Symfony http://decharlas.uji.es/symfony
  174. 174. ! Utiliza PHP 5.3.2 ! lazy-loading ! cache ! otros ! acelerador web Jornadas Symfony http://decharlas.uji.es/symfony
  175. 175. Apache Jornadas Symfony http://decharlas.uji.es/symfony
  176. 176. Squid Apache Jornadas Symfony http://decharlas.uji.es/symfony
  177. 177. Squid Apache Jornadas Symfony http://decharlas.uji.es/symfony
  178. 178. Symfony2 incluye un acelerador web creado con PHP Jornadas Symfony http://decharlas.uji.es/symfony
  179. 179. Apache Acelerador Aplicación Jornadas Symfony http://decharlas.uji.es/symfony
  180. 180. El acelerador guarda en la cache páginas completas Jornadas Symfony http://decharlas.uji.es/symfony
  181. 181. $respuesta->setExpires(...); $respuesta->setMaxAge(...); $respuesta->setTtl(...); $respuesta->setLastModified(...); Jornadas Symfony http://decharlas.uji.es/symfony
  182. 182. public function indexAction() { $respuesta = $this->render( 'FrontendBundle:Default:index', array('ofertas' => $ofertas) ); $respuesta->setMaxAge(60); return $respuesta; } Jornadas Symfony http://decharlas.uji.es/symfony
  183. 183. El acelerador minimiza las veces que se ejecuta la aplicación Jornadas Symfony http://decharlas.uji.es/symfony
  184. 184. Jornadas Symfony http://decharlas.uji.es/symfony
  185. 185. 180 minutos 1 minuto 5 minutos 180 1 minuto 5 minutos minutos 5 minutos Jornadas Symfony http://decharlas.uji.es/symfony
  186. 186. ESI Language Specification 1.0 Edge Side Includes (ESI) is an XML-based markup language that provides a means to assemble resources in HTTP clients. Unlike other in-markup languages, ESI is designed to leverage client tools like caches to improve end-user perceived performance, reduce processing overhead on the origin server, and enhanced availability. ESI allows for dynamic content assembly at the edge of the network, whether it is in a Content Delivery Network, end-user's browser, or in a "Reverse Proxy" IETF HTTP/1.1, part 6: Caching right next to the origin server. ESI is primarily intended for processing on surrogates (intermediaries that operate on behalf of theAbstract origin server, also known as "Reverse Proxies") that understand the ESI language. However, its application is not restricted to these devices. The control of where Protocol (HTTP) is an application-level The Hypertext Transfer ESI is processed is protocol for distributed, collaborative, hypermedia information addressed in the Edge Architecture Specification. Its capability token is ESI/1.0 ESI allows surrogates to treat parts document is Part 6 of the seven-part specification systems. This of pages as cacheable resources, which gives them that ability tothe protocol referred to as "HTTP/1.1" and, taken the defines serve resources from cache in more situations. together, obsoletes RFC 2616. Part 6 defines requirements on HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages. Jornadas Symfony http://decharlas.uji.es/symfony
  187. 187. ... <?php $view->actions->render( 'BolsaBundle::cotizaciones' ) ?> ... Jornadas Symfony http://decharlas.uji.es/symfony
  188. 188. ... <?php $view->actions->render( 'BolsaBundle::cotizaciones', array('standalone' => true) ) ?> ... Jornadas Symfony http://decharlas.uji.es/symfony
  189. 189. <esi:include src="..." /> Jornadas Symfony http://decharlas.uji.es/symfony
  190. 190. ! Utiliza PHP 5.3.2 ! lazy-loading ! cache ! otros ! acelerador web Jornadas Symfony http://decharlas.uji.es/symfony
  191. 191. 100 veces más rápido que symfony 1 Jornadas Symfony http://decharlas.uji.es/symfony
  192. 192. EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO Jornadas Symfony EXCLUSIVO http://decharlas.uji.es/symfony
  193. 193. completo modular fácil estándar rápido Jornadas Symfony http://decharlas.uji.es/symfony
  194. 194. 50% menos memoria que symfony 1 Jornadas Symfony http://decharlas.uji.es/symfony
  195. 195. Y mucho más... Jornadas Symfony http://decharlas.uji.es/symfony
  196. 196. Symfony2 está ! siendo desarrollado en estos momentos Jornadas Symfony http://decharlas.uji.es/symfony
  197. 197. autoloading eventos bundles cache formularios doctrine controlador validador propel CLI admin generator request/response configuración helpers enrutamiento base de datos i18n usuario debug logger pruebas escape mailer vista Jornadas Symfony http://decharlas.uji.es/symfony
  198. 198. primera versión alpha septiembre Jornadas Symfony http://decharlas.uji.es/symfony
  199. 199. lanzamiento previsto finales 2010 Jornadas Symfony http://decharlas.uji.es/symfony
  200. 200. Muchas gracias Jornadas Symfony http://decharlas.uji.es/symfony
  201. 201. Preguntas javier.eguiluz@gmail.com Jornadas Symfony http://decharlas.uji.es/symfony
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×