SlideShare una empresa de Scribd logo
Jornadas Symfony                               5 y 6 de julio 2010
                                               Universitat Jaume I, Castellón

http://decharlas.uji.es/symfony


organizan                         patrocinan




colaboran
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
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
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
sesión patrocinada por




                   www.ideatea.com


Jornadas Symfony                            http://decharlas.uji.es/symfony
¿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.es/symfony
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


   sfResponse       sfYAML     sfDatabase    sfForm      sfStorage


       sfCache     sfWidget    sfValidator    sfEventDispatcher




     symfony
                                                sfOutputEscaper


                                                 sfCoreAutoload


Jornadas Symfony                                       http://decharlas.uji.es/symfony
sf 1.4                  2009


                   symfony


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

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


                   Muchos archivos
                   Configuración
                   Difícil de aprender
                   Formularios
                   LENTO


                                     :)

Jornadas Symfony                          http://decharlas.uji.es/symfony
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.es/symfony
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
Demo

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


   > init:app frontend
                   frontend/
                   web/
                   --yaml


   > init:bundle Application/
   FrontendBundle
Jornadas Symfony                http://decharlas.uji.es/symfony
El código fuente



Jornadas Symfony                      http://decharlas.uji.es/symfony
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
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
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
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
<?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
namespaces


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




  class Migration
  {
      ...
  }



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




  class Doctrine_Migration
  {
      ...
  }



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

  class Migration
  {
      ...
  }



  namespace Doctrine;

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

     class Migration            class Migration
     {                          {
         ...                        ...
     }                          }



          $migracion = new SymfonyMigration();

          $migracion = new DoctrineMigration();



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

                   SymfonyFoundation


Jornadas Symfony                        http://decharlas.uji.es/symfony
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
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/
        frontend/          src/
     cache/                web/
     config/
     data/
     lib/
     log/
     plugins/
     test/
     web/

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




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




Jornadas Symfony                   http://decharlas.uji.es/symfony
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
1.x                              2.x




           7 archivos         3 archivos
           124 líneas         35 líneas

Jornadas Symfony                     http://decharlas.uji.es/symfony
mi_proyecto/
                    frontend/
                    src/
                    web/
Jornadas Symfony                  http://decharlas.uji.es/symfony
mi_proyecto/src/
              autoload.php




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




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

Jornadas Symfony             http://decharlas.uji.es/symfony
mi_proyecto/src/
              autoload.php
              Application/
                FrontendBundle/
              Bundle/
              vendor/
                symfony/
                doctrine/
                zend/
Jornadas Symfony                  http://decharlas.uji.es/symfony
1.x                             2.x



                   Proyecto         Proyecto
        Aplicación                  Aplicación
                   Módulo           Bundle


Jornadas Symfony                          http://decharlas.uji.es/symfony
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
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
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
Bundles
                   (paquetes)


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



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

          jobeet
    Aplicaciones
          frontend, backend
    Módulos
          oferta, categoría, empresa
Jornadas Symfony                  http://decharlas.uji.es/symfony
Proyecto                                        2.x

          jobeet
    Aplicaciones
          frontend, backend
    Bundle
          frontend, backend
Jornadas Symfony              http://decharlas.uji.es/symfony
Proyecto                                            2.x

          jobeet
    Aplicaciones
          frontend, backend
    Bundle
          oferta, categoría, empresa
Jornadas Symfony                  http://decharlas.uji.es/symfony
Proyecto                                             2.x

          jobeet
    Aplicaciones
          frontend, backend
    Bundle
          frontend, backend, oferta,
          categoría, empresa
Jornadas Symfony                   http://decharlas.uji.es/symfony
1.x                           2.x


            Aplicación
                   Módulo
                                     Bundle
                    Plugin
                   Librerías

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



Jornadas Symfony                  http://decharlas.uji.es/symfony
mi_proyecto/src/Application/
              FrontendBundle/
                Controller/
                Resources/




Jornadas Symfony                http://decharlas.uji.es/symfony
mi_proyecto/src/Application/
              FrontendBundle/
                Controller/
                  DefaultController.php
                Resources/




Jornadas Symfony                          http://decharlas.uji.es/symfony
mi_proyecto/src/Application/
              FrontendBundle/
                Controller/
                  DefaultController.php
                Resources/
                  config/
                  views/


Jornadas Symfony                          http://decharlas.uji.es/symfony
mi_proyecto/src/Application/
              FrontendBundle/
                Controller/
                  DefaultController.php
                Resources/
                  config/
                    routing.yml
                  views/
                    index.php
Jornadas Symfony                          http://decharlas.uji.es/symfony
twig

Jornadas Symfony          http://decharlas.uji.es/symfony
PropelBundle/
              Command/
              DependencyInjection/
              Logger/
              Resources/
              Tests/

Jornadas Symfony                     http://decharlas.uji.es/symfony
TwigBundle/
              DependencyInjection/
              Extension/
              Loader/
              Renderer/
              Resources/
              Tests/
              TokenParsers/
Jornadas Symfony                     http://decharlas.uji.es/symfony
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://decharlas.uji.es/symfony
Inyección de
      Dependencias   DI


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

  sfConfig
  sfProjectConfiguration
  sfAppConfiguration
  sfContext                DI
  config handlers
  ...

Jornadas Symfony            http://decharlas.uji.es/symfony
Problema
               ¿Cómo configuro un objeto
               mailer para enviar emails
               desde mis aplicaciones?


Jornadas Symfony                     http://decharlas.uji.es/symfony
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
class Mailer
       {
         function __construct() {
           $this->setUsername('xxxxxxxx')
           $this->setPassword('xxxxxxxx');
         }
       }




       $mailer = $this->getMailer();




Jornadas Symfony                             http://decharlas.uji.es/symfony
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
class Mailer
       {
         function __construct($user, $pass) {
           $this->setUsername($user)
           $this->setPassword($pass);
         }
       }




       $mailer = $this->getMailer('xxxx', 'xxxx');




Jornadas Symfony                          http://decharlas.uji.es/symfony
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
DIC

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



Jornadas Symfony            http://decharlas.uji.es/symfony
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
DIC
                   ! Objetos globales
                   " Modelo
                   " Tus clases

Jornadas Symfony                   http://decharlas.uji.es/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-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
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
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
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
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
La Vista



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

           slot
         layout
         partial         plantilla
        plantilla          slot
       component
     component slot
Jornadas Symfony                http://decharlas.uji.es/symfony
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
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>
    <?php echo $sf_content ?>
  </body>
</html>




Jornadas Symfony                     http://decharlas.uji.es/symfony
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
<?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
$view->extend('FrontendBundle:Default:layout');


   src/
     Application/
       FrontendBundle/
         Resources/
           views/
             Default/
               layout.php
Jornadas Symfony                         http://decharlas.uji.es/symfony
$view->extend('FrontendBundle::layout');


   src/
     Application/
       FrontendBundle/
         Resources/
           views/
             layout.php

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


   src/
     Bundle/
       PlantillasBundle/
         Resources/
           views/
              layout.php

Jornadas Symfony                         http://decharlas.uji.es/symfony
$view->extend(
        'PlantillasBundle::layout_pagina'
      );




Jornadas Symfony                            http://decharlas.uji.es/symfony
$view->extend(
        'PlantillasBundle::layout_seccion'
      );




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




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

       ...

       echo $view->render(
         'NoticiasBundle:Default:ultimaHora',
         array('noticias' => $noticias)
       )




Jornadas Symfony                          http://decharlas.uji.es/symfony
echo $view->actions->output(
         'BolsaBundle:Cotizaciones:indices',
         array('indice' => 'IBEX35')
       )

       ...

       echo $view->actions->output(
         'ContenidosBundle:Noticias:ultimaHora'
       )




Jornadas Symfony                          http://decharlas.uji.es/symfony
$view->extend(...)

           $view->render(...)

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



Jornadas Symfony                    http://decharlas.uji.es/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 Symfony                          http://decharlas.uji.es/symfony
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
«We're trading line length
              for lower [code] complexity»

                               David Heinemeier
                                    RailsConf 2010



Jornadas Symfony                        http://decharlas.uji.es/symfony
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

     <h1>{{ oferta.titulo }}</h1>



Jornadas Symfony                         http://decharlas.uji.es/symfony
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
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
twig
                   ! Código conciso
                   ! Diseñadores
                   ! Ultra-rápido
Jornadas Symfony                  http://decharlas.uji.es/symfony
El controlador



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

                          bundle   bundle




                          bundle   bundle




Jornadas Symfony                   http://decharlas.uji.es/symfony
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
homepage:
    pattern: /
    defaults: { _bundle: FoundationBundle ,
              _controller: Default, _action: index }




  homepage:
    pattern: /
    defaults: { _controller:
                     FoundationBundle:Default:index }



Jornadas Symfony                           http://decharlas.uji.es/symfony
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
oferta:
      pattern:     /ofertas/:id
      ...




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




Jornadas Symfony                      http://decharlas.uji.es/symfony
oferta:
      pattern:     /ofertas/:seccion/:categoria
      ...




  public function ofertaAction($seccion, $categoria)
  {
       ...
  }




Jornadas Symfony                             http://decharlas.uji.es/symfony
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
Formularios



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


                       Form
                   sfForm     Controlador   Modelo
                                               Modelo




                                                                  2.x




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


                   sfForm    Controlador         Modelo




                                                                2.x

                      Form                 Modelo

Jornadas Symfony                              http://decharlas.uji.es/symfony
$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
TextField

               TextareaField

              CheckboxField

                   ChoiceField

              PasswordField

                   HiddenField

Jornadas Symfony                 http://decharlas.uji.es/symfony
$form->add(new RepeatedField(
                     new PasswordField('contrasena'))
                   ));



                    Contraseña

                    Repite la
                    contraseña



Jornadas Symfony                                   http://decharlas.uji.es/symfony
$form->add(new CollectionField(
                     new TextField('telefonos'))
                   ));



                     Teléfono 1

                     Teléfono 2

                     Teléfono 3

Jornadas Symfony                                     http://decharlas.uji.es/symfony
$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
TextField    RepeatedField

               TextareaField     CollectionField

              CheckboxField       FieldGroup

                   ChoiceField

              PasswordField

                   HiddenField

Jornadas Symfony                                   http://decharlas.uji.es/symfony
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
Validación



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

                     sfForm
                     Form
                   sfValidator



                          Validador
                   Controlador



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

                     sfForm
                      Form
                    Validador
                   sfValidator         Form


                   Controlador             Validador



                    Modelo             Modelo
Jornadas Symfony                            http://decharlas.uji.es/symfony
ApplicationFrontendBundleModelCliente:
          properties:
            nombre:
              - MinLength: 3
            fecha_nacimiento:
              - Date: ~
            codigo_postal:
              - MaxLength: 5




Jornadas Symfony                           http://decharlas.uji.es/symfony
class Cliente
        {
            public $nombre;

                   public $fecha_nacimiento;

                   public $codigo_postal;
        }




Jornadas Symfony                               http://decharlas.uji.es/symfony
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
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
$validador = $this->container->getService(
                   'validator'
      );


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


Jornadas Symfony                          http://decharlas.uji.es/symfony
Pruebas unitarias y
                      funcionales


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

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



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




Jornadas Symfony                         http://decharlas.uji.es/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
  sfValidator            Java JSR 303
    autoload             PHP 5.3 autoload
         lime            PHPUnit
Jornadas Symfony                  http://decharlas.uji.es/symfony
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://decharlas.uji.es/symfony
depende de
                                          l tipo
                                de benchm
                                          ark




                   100
                   veces más rápido
                    que symfony 1


Jornadas Symfony                        http://decharlas.uji.es/symfony
3x
                   3x
                   4x

                   6x
Jornadas Symfony        http://decharlas.uji.es/symfony
! 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         helpers

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


Jornadas Symfony           http://decharlas.uji.es/symfony
cache/
           frontendDevDebugProjectContainer.meta
           frontendDevDebugProjectContainer.php
           frontendUrlGenerator.meta
           frontendUrlGenerator.php
           frontendUrlMatcher.meta
           frontendUrlMatcher.php
           __TwigTemplate_a242fa75a6db74398d3e6.php


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

Jornadas Symfony           http://decharlas.uji.es/symfony
> 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
! Utiliza PHP 5.3.2
     ! lazy-loading
     ! cache
     ! otros
     ! acelerador web
Jornadas Symfony           http://decharlas.uji.es/symfony
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                  http://decharlas.uji.es/symfony
Apache   Acelerador Aplicación




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

Jornadas Symfony                   http://decharlas.uji.es/symfony
$respuesta->setExpires(...);
   $respuesta->setMaxAge(...);
   $respuesta->setTtl(...);
   $respuesta->setLastModified(...);



Jornadas Symfony                 http://decharlas.uji.es/symfony
public function indexAction()
           {
               $respuesta = $this->render(
                   'FrontendBundle:Default:index',
                   array('ofertas' => $ofertas)
               );
               $respuesta->setMaxAge(60);

                   return $respuesta;
           }



Jornadas Symfony                             http://decharlas.uji.es/symfony
El acelerador minimiza
           las veces que se
        ejecuta la aplicación

Jornadas Symfony         http://decharlas.uji.es/symfony
Jornadas Symfony   http://decharlas.uji.es/symfony
180 minutos
                               1 minuto
                   5 minutos
      180            1 minuto   5 minutos
     minutos

                   5 minutos
Jornadas Symfony                    http://decharlas.uji.es/symfony
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
...

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

      ...

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

      <?php $view->actions->render(
        'BolsaBundle::cotizaciones',
        array('standalone' => true)
      ) ?>

      ...

Jornadas Symfony                http://decharlas.uji.es/symfony
<esi:include src="..." />




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


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



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


Jornadas Symfony                       http://decharlas.uji.es/symfony
Y mucho más...



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


Jornadas Symfony                     http://decharlas.uji.es/symfony
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
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/symfony

Más contenido relacionado

La actualidad más candente (20)

Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
betabeers
 
Backend (sf2Vigo)
Backend (sf2Vigo)Backend (sf2Vigo)
Backend (sf2Vigo)
Javier Eguiluz
 
Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain
Raul Fraile
 
Composer: Gestionando dependencias en PHP
Composer: Gestionando dependencias en PHP Composer: Gestionando dependencias en PHP
Composer: Gestionando dependencias en PHP
Fco Javier Núñez Berrocoso
 
Materiales del curso de Symfony2
Materiales del curso de Symfony2Materiales del curso de Symfony2
Materiales del curso de Symfony2
Raul Fraile
 
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularDesarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Freelancer
 
Symfony2: Framework para PHP5
Symfony2: Framework para PHP5Symfony2: Framework para PHP5
Symfony2: Framework para PHP5
Raul Fraile
 
Mi primer programa en Symfony2
Mi primer programa en Symfony2Mi primer programa en Symfony2
Mi primer programa en Symfony2
César Hernández
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGR
Juan Belón Pérez
 
Las buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones SymfonyLas buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones Symfony
symfony_bcn
 
Clase 2 conceptos fundamentales
Clase 2   conceptos fundamentalesClase 2   conceptos fundamentales
Clase 2 conceptos fundamentales
hydras_cs
 
Php Basico
Php BasicoPhp Basico
Php Basico
Eliecer Cedano
 
Introducción a recaptcha 3.0
Introducción a recaptcha 3.0Introducción a recaptcha 3.0
Introducción a recaptcha 3.0
Jesús Ayús
 
CRUD básico con Symfony
CRUD básico con SymfonyCRUD básico con Symfony
CRUD básico con Symfony
Symfony Zaragoza
 
Slides components en
Slides components enSlides components en
Slides components en
Javier López
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasos
Soni BM
 
4.Programación con PHP y MySQL
4.Programación con PHP y MySQL4.Programación con PHP y MySQL
4.Programación con PHP y MySQL
Ramiro Estigarribia Canese
 
Curso Php
Curso PhpCurso Php
Curso Php
larasaregune
 
Iniciacion a PHP (I)
Iniciacion a PHP (I)Iniciacion a PHP (I)
Iniciacion a PHP (I)
Francisco Calderón
 
Desarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfonyDesarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfony
Juan Eladio Sánchez Rosas
 
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
betabeers
 
Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain
Raul Fraile
 
Materiales del curso de Symfony2
Materiales del curso de Symfony2Materiales del curso de Symfony2
Materiales del curso de Symfony2
Raul Fraile
 
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularDesarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Freelancer
 
Symfony2: Framework para PHP5
Symfony2: Framework para PHP5Symfony2: Framework para PHP5
Symfony2: Framework para PHP5
Raul Fraile
 
Mi primer programa en Symfony2
Mi primer programa en Symfony2Mi primer programa en Symfony2
Mi primer programa en Symfony2
César Hernández
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGR
Juan Belón Pérez
 
Las buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones SymfonyLas buenas prácticas oficiales para aplicaciones Symfony
Las buenas prácticas oficiales para aplicaciones Symfony
symfony_bcn
 
Clase 2 conceptos fundamentales
Clase 2   conceptos fundamentalesClase 2   conceptos fundamentales
Clase 2 conceptos fundamentales
hydras_cs
 
Introducción a recaptcha 3.0
Introducción a recaptcha 3.0Introducción a recaptcha 3.0
Introducción a recaptcha 3.0
Jesús Ayús
 
Slides components en
Slides components enSlides components en
Slides components en
Javier López
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasos
Soni BM
 
Desarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfonyDesarrollo de aplicaciones web con PHP y symfony
Desarrollo de aplicaciones web con PHP y symfony
Juan Eladio Sánchez Rosas
 

Destacado (20)

Introduccion drupal
Introduccion drupalIntroduccion drupal
Introduccion drupal
Danilo Domínguez
 
Apostila php
Apostila phpApostila php
Apostila php
Yudi Ohara
 
Tutorial para criação de módulo no Xoops 2.4
Tutorial para criação de módulo no Xoops 2.4Tutorial para criação de módulo no Xoops 2.4
Tutorial para criação de módulo no Xoops 2.4
Fabio Telles Rodriguez
 
Programção PHP
Programção PHPProgramção PHP
Programção PHP
ceap
 
Lua para Jogos
Lua para JogosLua para Jogos
Lua para Jogos
David Ruiz
 
PAF
PAFPAF
PAF
Jose De Almeida Batista
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
Introduccion técnica a Drupal
Introduccion técnica a DrupalIntroduccion técnica a Drupal
Introduccion técnica a Drupal
Pedro Cambra
 
Wordpress la guida
Wordpress la guidaWordpress la guida
Wordpress la guida
lajonard
 
Información Investigación Digital
Información Investigación DigitalInformación Investigación Digital
Información Investigación Digital
Espacio Público
 
Manual Scribus
Manual ScribusManual Scribus
Manual Scribus
Marcelo Paulino Costa
 
Cómo desarrollar sitios Web amigables a los buscadores
Cómo desarrollar sitios Web amigables a los buscadoresCómo desarrollar sitios Web amigables a los buscadores
Cómo desarrollar sitios Web amigables a los buscadores
Human Level
 
Security & PHP
Security & PHPSecurity & PHP
Security & PHP
Nuno Loureiro
 
Apostila Tutorial CakePHP
Apostila Tutorial CakePHPApostila Tutorial CakePHP
Apostila Tutorial CakePHP
Fernando Palma
 
Introdução ao Java
Introdução ao JavaIntrodução ao Java
Introdução ao Java
Eduardo Carvalho
 
Drupal 7 (2)
Drupal 7 (2)Drupal 7 (2)
Drupal 7 (2)
jecol59
 
¿Qué tiene que saber un investigador para mejorar los resultados de su inves...
¿Qué tiene que  saber un investigador para mejorar los resultados de su inves...¿Qué tiene que  saber un investigador para mejorar los resultados de su inves...
¿Qué tiene que saber un investigador para mejorar los resultados de su inves...
Julio Alonso Arévalo
 
SOAP y Web Services
SOAP y Web ServicesSOAP y Web Services
SOAP y Web Services
edmodi
 
Ejercicios y practicas en PHP
Ejercicios y practicas en PHPEjercicios y practicas en PHP
Ejercicios y practicas en PHP
Robert Rodriguez
 
Catálogo de software básico y aplicaciones 2.0
Catálogo de software básico y aplicaciones 2.0Catálogo de software básico y aplicaciones 2.0
Catálogo de software básico y aplicaciones 2.0
CRAER de Molina
 
Tutorial para criação de módulo no Xoops 2.4
Tutorial para criação de módulo no Xoops 2.4Tutorial para criação de módulo no Xoops 2.4
Tutorial para criação de módulo no Xoops 2.4
Fabio Telles Rodriguez
 
Programção PHP
Programção PHPProgramção PHP
Programção PHP
ceap
 
Lua para Jogos
Lua para JogosLua para Jogos
Lua para Jogos
David Ruiz
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
Introduccion técnica a Drupal
Introduccion técnica a DrupalIntroduccion técnica a Drupal
Introduccion técnica a Drupal
Pedro Cambra
 
Wordpress la guida
Wordpress la guidaWordpress la guida
Wordpress la guida
lajonard
 
Información Investigación Digital
Información Investigación DigitalInformación Investigación Digital
Información Investigación Digital
Espacio Público
 
Cómo desarrollar sitios Web amigables a los buscadores
Cómo desarrollar sitios Web amigables a los buscadoresCómo desarrollar sitios Web amigables a los buscadores
Cómo desarrollar sitios Web amigables a los buscadores
Human Level
 
Apostila Tutorial CakePHP
Apostila Tutorial CakePHPApostila Tutorial CakePHP
Apostila Tutorial CakePHP
Fernando Palma
 
Drupal 7 (2)
Drupal 7 (2)Drupal 7 (2)
Drupal 7 (2)
jecol59
 
¿Qué tiene que saber un investigador para mejorar los resultados de su inves...
¿Qué tiene que  saber un investigador para mejorar los resultados de su inves...¿Qué tiene que  saber un investigador para mejorar los resultados de su inves...
¿Qué tiene que saber un investigador para mejorar los resultados de su inves...
Julio Alonso Arévalo
 
SOAP y Web Services
SOAP y Web ServicesSOAP y Web Services
SOAP y Web Services
edmodi
 
Ejercicios y practicas en PHP
Ejercicios y practicas en PHPEjercicios y practicas en PHP
Ejercicios y practicas en PHP
Robert Rodriguez
 
Catálogo de software básico y aplicaciones 2.0
Catálogo de software básico y aplicaciones 2.0Catálogo de software básico y aplicaciones 2.0
Catálogo de software básico y aplicaciones 2.0
CRAER de Molina
 

Similar a Symfony2, Jornadas Symfony (20)

Symfony plugins - No reinventes la rueda PLUGINS - Jornadas Castellón
Symfony plugins - No reinventes la rueda PLUGINS - Jornadas CastellónSymfony plugins - No reinventes la rueda PLUGINS - Jornadas Castellón
Symfony plugins - No reinventes la rueda PLUGINS - Jornadas Castellón
Jordi Llonch
 
symfony admin generator - decharlas
symfony admin generator - decharlassymfony admin generator - decharlas
symfony admin generator - decharlas
Decharlas
 
Symfony y Admin Generator
Symfony y Admin GeneratorSymfony y Admin Generator
Symfony y Admin Generator
Javier López
 
Symfony: Domesticando las Vistas
Symfony: Domesticando las VistasSymfony: Domesticando las Vistas
Symfony: Domesticando las Vistas
Jose Antonio Pio
 
Symfony: Domesticando las Vistas - decharlas
Symfony: Domesticando las Vistas - decharlasSymfony: Domesticando las Vistas - decharlas
Symfony: Domesticando las Vistas - decharlas
Decharlas
 
Symfony plugins - decharlas
Symfony plugins - decharlasSymfony plugins - decharlas
Symfony plugins - decharlas
Decharlas
 
Symfony en la gestión de un centro de computación avanzada
Symfony en la gestión de un centro de computación avanzadaSymfony en la gestión de un centro de computación avanzada
Symfony en la gestión de un centro de computación avanzada
César Suárez Ortega
 
Caso práctico II: symfony en la gestión de un centro de computación avanzada ...
Caso práctico II: symfony en la gestión de un centro de computación avanzada ...Caso práctico II: symfony en la gestión de un centro de computación avanzada ...
Caso práctico II: symfony en la gestión de un centro de computación avanzada ...
Decharlas
 
Symfony 1 y 2
Symfony 1 y 2Symfony 1 y 2
Symfony 1 y 2
Roberto Germán Diaz
 
Symfony, cloud computing y web escalables
Symfony, cloud computing y web escalablesSymfony, cloud computing y web escalables
Symfony, cloud computing y web escalables
Asier Marqués
 
Symfony, cloud computing y webs scalables - decharlas
Symfony, cloud computing y webs scalables - decharlasSymfony, cloud computing y webs scalables - decharlas
Symfony, cloud computing y webs scalables - decharlas
Decharlas
 
ORM Doctrine
ORM DoctrineORM Doctrine
ORM Doctrine
Decharlas
 
deSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
deSymfony 2017: Symfony 4, Symfony Flex y el futuro de SymfonydeSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
deSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
Javier Eguiluz
 
Presentacion Sergio Viteri (Voota) decharlas/s
Presentacion Sergio Viteri (Voota) decharlas/sPresentacion Sergio Viteri (Voota) decharlas/s
Presentacion Sergio Viteri (Voota) decharlas/s
Sergio Viteri
 
Caso práctico symfony: voota.es - decharlas
Caso práctico symfony: voota.es - decharlasCaso práctico symfony: voota.es - decharlas
Caso práctico symfony: voota.es - decharlas
Decharlas
 
Taller ruby
Taller rubyTaller ruby
Taller ruby
Juan Vazquez Murga
 
Adentrándonos al Framework Symfony
Adentrándonos al  Framework SymfonyAdentrándonos al  Framework Symfony
Adentrándonos al Framework Symfony
Rodrigo Miranda
 
Componentes, el arma secreta de Symfony2
Componentes, el arma secreta de Symfony2Componentes, el arma secreta de Symfony2
Componentes, el arma secreta de Symfony2
Javier López
 
Shell script
Shell scriptShell script
Shell script
uniminuto
 
Symfony2 y su ecosistema
Symfony2 y su ecosistemaSymfony2 y su ecosistema
Symfony2 y su ecosistema
javiacei
 
Symfony plugins - No reinventes la rueda PLUGINS - Jornadas Castellón
Symfony plugins - No reinventes la rueda PLUGINS - Jornadas CastellónSymfony plugins - No reinventes la rueda PLUGINS - Jornadas Castellón
Symfony plugins - No reinventes la rueda PLUGINS - Jornadas Castellón
Jordi Llonch
 
symfony admin generator - decharlas
symfony admin generator - decharlassymfony admin generator - decharlas
symfony admin generator - decharlas
Decharlas
 
Symfony y Admin Generator
Symfony y Admin GeneratorSymfony y Admin Generator
Symfony y Admin Generator
Javier López
 
Symfony: Domesticando las Vistas
Symfony: Domesticando las VistasSymfony: Domesticando las Vistas
Symfony: Domesticando las Vistas
Jose Antonio Pio
 
Symfony: Domesticando las Vistas - decharlas
Symfony: Domesticando las Vistas - decharlasSymfony: Domesticando las Vistas - decharlas
Symfony: Domesticando las Vistas - decharlas
Decharlas
 
Symfony plugins - decharlas
Symfony plugins - decharlasSymfony plugins - decharlas
Symfony plugins - decharlas
Decharlas
 
Symfony en la gestión de un centro de computación avanzada
Symfony en la gestión de un centro de computación avanzadaSymfony en la gestión de un centro de computación avanzada
Symfony en la gestión de un centro de computación avanzada
César Suárez Ortega
 
Caso práctico II: symfony en la gestión de un centro de computación avanzada ...
Caso práctico II: symfony en la gestión de un centro de computación avanzada ...Caso práctico II: symfony en la gestión de un centro de computación avanzada ...
Caso práctico II: symfony en la gestión de un centro de computación avanzada ...
Decharlas
 
Symfony, cloud computing y web escalables
Symfony, cloud computing y web escalablesSymfony, cloud computing y web escalables
Symfony, cloud computing y web escalables
Asier Marqués
 
Symfony, cloud computing y webs scalables - decharlas
Symfony, cloud computing y webs scalables - decharlasSymfony, cloud computing y webs scalables - decharlas
Symfony, cloud computing y webs scalables - decharlas
Decharlas
 
ORM Doctrine
ORM DoctrineORM Doctrine
ORM Doctrine
Decharlas
 
deSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
deSymfony 2017: Symfony 4, Symfony Flex y el futuro de SymfonydeSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
deSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
Javier Eguiluz
 
Presentacion Sergio Viteri (Voota) decharlas/s
Presentacion Sergio Viteri (Voota) decharlas/sPresentacion Sergio Viteri (Voota) decharlas/s
Presentacion Sergio Viteri (Voota) decharlas/s
Sergio Viteri
 
Caso práctico symfony: voota.es - decharlas
Caso práctico symfony: voota.es - decharlasCaso práctico symfony: voota.es - decharlas
Caso práctico symfony: voota.es - decharlas
Decharlas
 
Adentrándonos al Framework Symfony
Adentrándonos al  Framework SymfonyAdentrándonos al  Framework Symfony
Adentrándonos al Framework Symfony
Rodrigo Miranda
 
Componentes, el arma secreta de Symfony2
Componentes, el arma secreta de Symfony2Componentes, el arma secreta de Symfony2
Componentes, el arma secreta de Symfony2
Javier López
 
Shell script
Shell scriptShell script
Shell script
uniminuto
 
Symfony2 y su ecosistema
Symfony2 y su ecosistemaSymfony2 y su ecosistema
Symfony2 y su ecosistema
javiacei
 

Más de Javier Eguiluz (16)

New Symfony Tips & Tricks (SymfonyCon Paris 2015)
New Symfony Tips & Tricks (SymfonyCon Paris 2015)New Symfony Tips & Tricks (SymfonyCon Paris 2015)
New Symfony Tips & Tricks (SymfonyCon Paris 2015)
Javier Eguiluz
 
Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)
Javier Eguiluz
 
Symfony tips and tricks
Symfony tips and tricksSymfony tips and tricks
Symfony tips and tricks
Javier Eguiluz
 
Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8
Javier Eguiluz
 
Twig tips and tricks
Twig tips and tricksTwig tips and tricks
Twig tips and tricks
Javier Eguiluz
 
Twig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadasTwig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadas
Javier Eguiluz
 
Wallpaper Notifier
Wallpaper NotifierWallpaper Notifier
Wallpaper Notifier
Javier Eguiluz
 
Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)
Javier Eguiluz
 
Desymfony 2012 - Concurso de diseño
Desymfony 2012 - Concurso de diseñoDesymfony 2012 - Concurso de diseño
Desymfony 2012 - Concurso de diseño
Javier Eguiluz
 
Curso Symfony - Anexos
Curso Symfony - AnexosCurso Symfony - Anexos
Curso Symfony - Anexos
Javier Eguiluz
 
Curso Symfony - Clase 5
Curso Symfony - Clase 5Curso Symfony - Clase 5
Curso Symfony - Clase 5
Javier Eguiluz
 
Curso Symfony - Clase 4
Curso Symfony - Clase 4Curso Symfony - Clase 4
Curso Symfony - Clase 4
Javier Eguiluz
 
Curso Symfony - Clase 3
Curso Symfony - Clase 3Curso Symfony - Clase 3
Curso Symfony - Clase 3
Javier Eguiluz
 
Curso Symfony - Clase 2
Curso Symfony - Clase 2Curso Symfony - Clase 2
Curso Symfony - Clase 2
Javier Eguiluz
 
Curso Symfony - Clase 1
Curso Symfony - Clase 1Curso Symfony - Clase 1
Curso Symfony - Clase 1
Javier Eguiluz
 
New Symfony Tips & Tricks (SymfonyCon Paris 2015)
New Symfony Tips & Tricks (SymfonyCon Paris 2015)New Symfony Tips & Tricks (SymfonyCon Paris 2015)
New Symfony Tips & Tricks (SymfonyCon Paris 2015)
Javier Eguiluz
 
Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)
Javier Eguiluz
 
Symfony tips and tricks
Symfony tips and tricksSymfony tips and tricks
Symfony tips and tricks
Javier Eguiluz
 
Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8
Javier Eguiluz
 
Twig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadasTwig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadas
Javier Eguiluz
 
Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)
Javier Eguiluz
 
Desymfony 2012 - Concurso de diseño
Desymfony 2012 - Concurso de diseñoDesymfony 2012 - Concurso de diseño
Desymfony 2012 - Concurso de diseño
Javier Eguiluz
 
Curso Symfony - Anexos
Curso Symfony - AnexosCurso Symfony - Anexos
Curso Symfony - Anexos
Javier Eguiluz
 
Curso Symfony - Clase 5
Curso Symfony - Clase 5Curso Symfony - Clase 5
Curso Symfony - Clase 5
Javier Eguiluz
 
Curso Symfony - Clase 4
Curso Symfony - Clase 4Curso Symfony - Clase 4
Curso Symfony - Clase 4
Javier Eguiluz
 
Curso Symfony - Clase 3
Curso Symfony - Clase 3Curso Symfony - Clase 3
Curso Symfony - Clase 3
Javier Eguiluz
 
Curso Symfony - Clase 2
Curso Symfony - Clase 2Curso Symfony - Clase 2
Curso Symfony - Clase 2
Javier Eguiluz
 
Curso Symfony - Clase 1
Curso Symfony - Clase 1Curso Symfony - Clase 1
Curso Symfony - Clase 1
Javier Eguiluz
 

Último (20)

U3 - PLSQL - TRIGGERS - conceptos basicos
U3 - PLSQL - TRIGGERS - conceptos basicosU3 - PLSQL - TRIGGERS - conceptos basicos
U3 - PLSQL - TRIGGERS - conceptos basicos
Orlando Giron
 
NUEVAS TECNOLOGÍAS: INTERNET DE LAS COSAS
NUEVAS TECNOLOGÍAS: INTERNET DE LAS COSASNUEVAS TECNOLOGÍAS: INTERNET DE LAS COSAS
NUEVAS TECNOLOGÍAS: INTERNET DE LAS COSAS
yarinelaabre563
 
Funcionamiento, tipos y funciones del sistema operativo en la informática mod...
Funcionamiento, tipos y funciones del sistema operativo en la informática mod...Funcionamiento, tipos y funciones del sistema operativo en la informática mod...
Funcionamiento, tipos y funciones del sistema operativo en la informática mod...
60461134
 
"El uso de las TIC en la vida cotidiana"
"El uso de las TIC en la vida cotidiana""El uso de las TIC en la vida cotidiana"
"El uso de las TIC en la vida cotidiana"
251739102
 
_partes la arquitectura de un computador actual.pptx
_partes la arquitectura de un computador actual.pptx_partes la arquitectura de un computador actual.pptx
_partes la arquitectura de un computador actual.pptx
710653591
 
Inteligencia Artificial y Modelos de Lenguaje Grande
Inteligencia Artificial y Modelos de Lenguaje GrandeInteligencia Artificial y Modelos de Lenguaje Grande
Inteligencia Artificial y Modelos de Lenguaje Grande
vcalle6
 
Unidad 3 - Introducción PLSQL - cursores
Unidad 3 - Introducción PLSQL - cursoresUnidad 3 - Introducción PLSQL - cursores
Unidad 3 - Introducción PLSQL - cursores
Orlando Giron
 
SESIÓN 4 - SISTEMAS KANBAN, POKA YOKE, JUSTO A TIEMPO.pptx
SESIÓN 4 - SISTEMAS KANBAN, POKA YOKE, JUSTO A TIEMPO.pptxSESIÓN 4 - SISTEMAS KANBAN, POKA YOKE, JUSTO A TIEMPO.pptx
SESIÓN 4 - SISTEMAS KANBAN, POKA YOKE, JUSTO A TIEMPO.pptx
45509974
 
La Digitación pasos para aprender a escribir en word.pptx
La Digitación pasos para aprender a escribir en word.pptxLa Digitación pasos para aprender a escribir en word.pptx
La Digitación pasos para aprender a escribir en word.pptx
FrankJairCruzLopez
 
SIRI LA INTELIGENCIA ARTIFICIAL De Apple
SIRI LA INTELIGENCIA ARTIFICIAL De AppleSIRI LA INTELIGENCIA ARTIFICIAL De Apple
SIRI LA INTELIGENCIA ARTIFICIAL De Apple
nicolelopezm405
 
Medición (y mejora) del impacto de la IA
Medición (y mejora)  del impacto de la IAMedición (y mejora)  del impacto de la IA
Medición (y mejora) del impacto de la IA
Cade Soluciones
 
cuadro comparativo , web 1.0, web 2.0 y web 3.0
cuadro comparativo , web 1.0, web 2.0 y web 3.0cuadro comparativo , web 1.0, web 2.0 y web 3.0
cuadro comparativo , web 1.0, web 2.0 y web 3.0
carvajaljosemar23
 
Instalaciones_Comunicacion_Domotica_Jairo_Castro_Diseñada.pptx
Instalaciones_Comunicacion_Domotica_Jairo_Castro_Diseñada.pptxInstalaciones_Comunicacion_Domotica_Jairo_Castro_Diseñada.pptx
Instalaciones_Comunicacion_Domotica_Jairo_Castro_Diseñada.pptx
homiewnk3
 
Nomenclaturas y tipos de Fresadoras.pptx
Nomenclaturas y tipos de Fresadoras.pptxNomenclaturas y tipos de Fresadoras.pptx
Nomenclaturas y tipos de Fresadoras.pptx
harperalegria
 
tecnologias emergentes en mi carrera.pdf
tecnologias emergentes en mi carrera.pdftecnologias emergentes en mi carrera.pdf
tecnologias emergentes en mi carrera.pdf
76640813
 
TODO SOBRE EL FUTURO TECNOLOGICO 2025.PDF
TODO SOBRE EL FUTURO TECNOLOGICO 2025.PDFTODO SOBRE EL FUTURO TECNOLOGICO 2025.PDF
TODO SOBRE EL FUTURO TECNOLOGICO 2025.PDF
moranpazos1
 
Unidad 3 Introducción PLSQL - PROCEDURE.ppt
Unidad 3 Introducción PLSQL - PROCEDURE.pptUnidad 3 Introducción PLSQL - PROCEDURE.ppt
Unidad 3 Introducción PLSQL - PROCEDURE.ppt
Orlando Giron
 
que ea inteligencia artificial de sistemas
que ea inteligencia artificial de sistemasque ea inteligencia artificial de sistemas
que ea inteligencia artificial de sistemas
saavedrabarrientosma
 
Unidad 3 Introducción PLSQL - FUNCIONES.ppt
Unidad 3 Introducción PLSQL - FUNCIONES.pptUnidad 3 Introducción PLSQL - FUNCIONES.ppt
Unidad 3 Introducción PLSQL - FUNCIONES.ppt
Orlando Giron
 
Webcast_DC-NexusDashboardO-mar27-2025.pdf
Webcast_DC-NexusDashboardO-mar27-2025.pdfWebcast_DC-NexusDashboardO-mar27-2025.pdf
Webcast_DC-NexusDashboardO-mar27-2025.pdf
EltonCuray1
 
U3 - PLSQL - TRIGGERS - conceptos basicos
U3 - PLSQL - TRIGGERS - conceptos basicosU3 - PLSQL - TRIGGERS - conceptos basicos
U3 - PLSQL - TRIGGERS - conceptos basicos
Orlando Giron
 
NUEVAS TECNOLOGÍAS: INTERNET DE LAS COSAS
NUEVAS TECNOLOGÍAS: INTERNET DE LAS COSASNUEVAS TECNOLOGÍAS: INTERNET DE LAS COSAS
NUEVAS TECNOLOGÍAS: INTERNET DE LAS COSAS
yarinelaabre563
 
Funcionamiento, tipos y funciones del sistema operativo en la informática mod...
Funcionamiento, tipos y funciones del sistema operativo en la informática mod...Funcionamiento, tipos y funciones del sistema operativo en la informática mod...
Funcionamiento, tipos y funciones del sistema operativo en la informática mod...
60461134
 
"El uso de las TIC en la vida cotidiana"
"El uso de las TIC en la vida cotidiana""El uso de las TIC en la vida cotidiana"
"El uso de las TIC en la vida cotidiana"
251739102
 
_partes la arquitectura de un computador actual.pptx
_partes la arquitectura de un computador actual.pptx_partes la arquitectura de un computador actual.pptx
_partes la arquitectura de un computador actual.pptx
710653591
 
Inteligencia Artificial y Modelos de Lenguaje Grande
Inteligencia Artificial y Modelos de Lenguaje GrandeInteligencia Artificial y Modelos de Lenguaje Grande
Inteligencia Artificial y Modelos de Lenguaje Grande
vcalle6
 
Unidad 3 - Introducción PLSQL - cursores
Unidad 3 - Introducción PLSQL - cursoresUnidad 3 - Introducción PLSQL - cursores
Unidad 3 - Introducción PLSQL - cursores
Orlando Giron
 
SESIÓN 4 - SISTEMAS KANBAN, POKA YOKE, JUSTO A TIEMPO.pptx
SESIÓN 4 - SISTEMAS KANBAN, POKA YOKE, JUSTO A TIEMPO.pptxSESIÓN 4 - SISTEMAS KANBAN, POKA YOKE, JUSTO A TIEMPO.pptx
SESIÓN 4 - SISTEMAS KANBAN, POKA YOKE, JUSTO A TIEMPO.pptx
45509974
 
La Digitación pasos para aprender a escribir en word.pptx
La Digitación pasos para aprender a escribir en word.pptxLa Digitación pasos para aprender a escribir en word.pptx
La Digitación pasos para aprender a escribir en word.pptx
FrankJairCruzLopez
 
SIRI LA INTELIGENCIA ARTIFICIAL De Apple
SIRI LA INTELIGENCIA ARTIFICIAL De AppleSIRI LA INTELIGENCIA ARTIFICIAL De Apple
SIRI LA INTELIGENCIA ARTIFICIAL De Apple
nicolelopezm405
 
Medición (y mejora) del impacto de la IA
Medición (y mejora)  del impacto de la IAMedición (y mejora)  del impacto de la IA
Medición (y mejora) del impacto de la IA
Cade Soluciones
 
cuadro comparativo , web 1.0, web 2.0 y web 3.0
cuadro comparativo , web 1.0, web 2.0 y web 3.0cuadro comparativo , web 1.0, web 2.0 y web 3.0
cuadro comparativo , web 1.0, web 2.0 y web 3.0
carvajaljosemar23
 
Instalaciones_Comunicacion_Domotica_Jairo_Castro_Diseñada.pptx
Instalaciones_Comunicacion_Domotica_Jairo_Castro_Diseñada.pptxInstalaciones_Comunicacion_Domotica_Jairo_Castro_Diseñada.pptx
Instalaciones_Comunicacion_Domotica_Jairo_Castro_Diseñada.pptx
homiewnk3
 
Nomenclaturas y tipos de Fresadoras.pptx
Nomenclaturas y tipos de Fresadoras.pptxNomenclaturas y tipos de Fresadoras.pptx
Nomenclaturas y tipos de Fresadoras.pptx
harperalegria
 
tecnologias emergentes en mi carrera.pdf
tecnologias emergentes en mi carrera.pdftecnologias emergentes en mi carrera.pdf
tecnologias emergentes en mi carrera.pdf
76640813
 
TODO SOBRE EL FUTURO TECNOLOGICO 2025.PDF
TODO SOBRE EL FUTURO TECNOLOGICO 2025.PDFTODO SOBRE EL FUTURO TECNOLOGICO 2025.PDF
TODO SOBRE EL FUTURO TECNOLOGICO 2025.PDF
moranpazos1
 
Unidad 3 Introducción PLSQL - PROCEDURE.ppt
Unidad 3 Introducción PLSQL - PROCEDURE.pptUnidad 3 Introducción PLSQL - PROCEDURE.ppt
Unidad 3 Introducción PLSQL - PROCEDURE.ppt
Orlando Giron
 
que ea inteligencia artificial de sistemas
que ea inteligencia artificial de sistemasque ea inteligencia artificial de sistemas
que ea inteligencia artificial de sistemas
saavedrabarrientosma
 
Unidad 3 Introducción PLSQL - FUNCIONES.ppt
Unidad 3 Introducción PLSQL - FUNCIONES.pptUnidad 3 Introducción PLSQL - FUNCIONES.ppt
Unidad 3 Introducción PLSQL - FUNCIONES.ppt
Orlando Giron
 
Webcast_DC-NexusDashboardO-mar27-2025.pdf
Webcast_DC-NexusDashboardO-mar27-2025.pdfWebcast_DC-NexusDashboardO-mar27-2025.pdf
Webcast_DC-NexusDashboardO-mar27-2025.pdf
EltonCuray1
 

Symfony2, Jornadas Symfony

  • 1. Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I, Castellón http://decharlas.uji.es/symfony organizan patrocinan colaboran
  • 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. 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. 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. sesión patrocinada por www.ideatea.com Jornadas Symfony http://decharlas.uji.es/symfony
  • 6. ¿Qué es Symfony 2? Jornadas Symfony http://decharlas.uji.es/symfony
  • 7. symfony Jornadas Symfony http://decharlas.uji.es/symfony
  • 8. Symfony2 Jornadas Symfony http://decharlas.uji.es/symfony
  • 9. ¿En qué se diferencian sf 1 y sf2? Jornadas Symfony http://decharlas.uji.es/symfony
  • 10. en todo Jornadas Symfony http://decharlas.uji.es/symfony
  • 11. en casi todo Jornadas Symfony http://decharlas.uji.es/symfony
  • 12. La evolución de Symfony Jornadas Symfony http://decharlas.uji.es/symfony
  • 13. sf 1.0 2007 symfony Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. sf 1.4 2009 symfony Jornadas Symfony http://decharlas.uji.es/symfony
  • 16. ¿Por qué reescribirlo todo de nuevo? Jornadas Symfony http://decharlas.uji.es/symfony
  • 17. Problemas Muchos archivos Configuración Difícil de aprender Formularios LENTO :) Jornadas Symfony http://decharlas.uji.es/symfony
  • 18. Nuestro primer proyecto Symfony2 Jornadas Symfony http://decharlas.uji.es/symfony
  • 19. 5.3.2 subversion Jornadas Symfony http://decharlas.uji.es/symfony
  • 20. > git clone http://github.com/symfony/ symfony-sandbox.git Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. Demo Jornadas Symfony http://decharlas.uji.es/symfony
  • 23. > php hello/console -s > init:app frontend frontend/ web/ --yaml > init:bundle Application/ FrontendBundle Jornadas Symfony http://decharlas.uji.es/symfony
  • 24. El código fuente Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. 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. 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. 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. <?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. namespaces Jornadas Symfony http://decharlas.uji.es/symfony
  • 31. class Migration { ... } class Migration { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  • 32. class sfMigration { ... } class Doctrine_Migration { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  • 33. namespace Symfony; class Migration { ... } namespace Doctrine; class Migration { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  • 34. namespace Symfony; namespace Doctrine; class Migration class Migration { { ... ... } } $migracion = new SymfonyMigration(); $migracion = new DoctrineMigration(); Jornadas Symfony http://decharlas.uji.es/symfony
  • 35. SymfonyComponents SymfonyFramework SymfonyFoundation Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. completo xxxxxx xxxxx xxxxxxxx xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  • 38. Estructura del proyecto Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. mi_proyecto/ frontend/ src/ web/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 41. mi_proyecto/frontend/ frontendKernel.php Jornadas Symfony http://decharlas.uji.es/symfony
  • 42. mi_proyecto/frontend/ frontendKernel.php cache/ logs/ config/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. 1.x 2.x 7 archivos 3 archivos 124 líneas 35 líneas Jornadas Symfony http://decharlas.uji.es/symfony
  • 45. mi_proyecto/ frontend/ src/ web/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 46. mi_proyecto/src/ autoload.php Jornadas Symfony http://decharlas.uji.es/symfony
  • 47. mi_proyecto/src/ autoload.php Application/ Bundle/ vendor/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 48. mi_proyecto/src/ autoload.php Application/ Bundle/ vendor/ symfony/ doctrine/ zend/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 49. mi_proyecto/src/ autoload.php Application/ FrontendBundle/ Bundle/ vendor/ symfony/ doctrine/ zend/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 50. 1.x 2.x Proyecto Proyecto Aplicación Aplicación Módulo Bundle Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. 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. 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. Bundles (paquetes) Jornadas Symfony http://decharlas.uji.es/symfony
  • 55. « Un bundle es un conjunto de archivos que implementan una funcionalidad » Jornadas Symfony http://decharlas.uji.es/symfony
  • 56. Proyecto 1.x jobeet Aplicaciones frontend, backend Módulos oferta, categoría, empresa Jornadas Symfony http://decharlas.uji.es/symfony
  • 57. Proyecto 2.x jobeet Aplicaciones frontend, backend Bundle frontend, backend Jornadas Symfony http://decharlas.uji.es/symfony
  • 58. Proyecto 2.x jobeet Aplicaciones frontend, backend Bundle oferta, categoría, empresa Jornadas Symfony http://decharlas.uji.es/symfony
  • 59. Proyecto 2.x jobeet Aplicaciones frontend, backend Bundle frontend, backend, oferta, categoría, empresa Jornadas Symfony http://decharlas.uji.es/symfony
  • 60. 1.x 2.x Aplicación Módulo Bundle Plugin Librerías Jornadas Symfony http://decharlas.uji.es/symfony
  • 61. mi_proyecto/src/ autoload.php Application/ FrontendBundle/ Bundle/ vendor/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 62. mi_proyecto/src/Application/ FrontendBundle/ Controller/ Resources/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 63. mi_proyecto/src/Application/ FrontendBundle/ Controller/ DefaultController.php Resources/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 64. mi_proyecto/src/Application/ FrontendBundle/ Controller/ DefaultController.php Resources/ config/ views/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 65. mi_proyecto/src/Application/ FrontendBundle/ Controller/ DefaultController.php Resources/ config/ routing.yml views/ index.php Jornadas Symfony http://decharlas.uji.es/symfony
  • 66. twig Jornadas Symfony http://decharlas.uji.es/symfony
  • 67. PropelBundle/ Command/ DependencyInjection/ Logger/ Resources/ Tests/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 68. TwigBundle/ DependencyInjection/ Extension/ Loader/ Renderer/ Resources/ Tests/ TokenParsers/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 69. Jornadas Symfony http://decharlas.uji.es/symfony
  • 70. completo modular xxxxx xxxxxxxx xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  • 71. Inyección de Dependencias Jornadas Symfony http://decharlas.uji.es/symfony
  • 72. Inyección de Dependencias DI Inversion of Control IoC Jornadas Symfony http://decharlas.uji.es/symfony
  • 73. Inyección de Dependencias DI Jornadas Symfony http://decharlas.uji.es/symfony
  • 74. 1.x 2.x sfConfig sfProjectConfiguration sfAppConfiguration sfContext DI config handlers ... Jornadas Symfony http://decharlas.uji.es/symfony
  • 75. Problema ¿Cómo configuro un objeto mailer para enviar emails desde mis aplicaciones? Jornadas Symfony http://decharlas.uji.es/symfony
  • 76. public function emailAction() { $mailer = $this->getMailer(); $mensaje = Swift_Message::newInstance() ->setSubject('Asunto') ->setFrom('[email protected]') ->setTo('[email protected]') ->setBody('Cuerpo'); $mailer->send($mensaje); ... } Jornadas Symfony http://decharlas.uji.es/symfony
  • 77. class Mailer { function __construct() { $this->setUsername('xxxxxxxx') $this->setPassword('xxxxxxxx'); } } $mailer = $this->getMailer(); Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. 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. 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. DIC Jornadas Symfony http://decharlas.uji.es/symfony
  • 82. D ependency I njection C ontainer Jornadas Symfony http://decharlas.uji.es/symfony
  • 83. DIC = configuración flexible Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. DIC ! Objetos globales " Modelo " Tus clases Jornadas Symfony http://decharlas.uji.es/symfony
  • 86. El modelo Jornadas Symfony http://decharlas.uji.es/symfony
  • 87. Jornadas Symfony http://decharlas.uji.es/symfony
  • 88. Jornadas Symfony http://decharlas.uji.es/symfony
  • 89. ORM DBAL PDO Jornadas Symfony http://decharlas.uji.es/symfony
  • 90. ORM ODM Jornadas Symfony http://decharlas.uji.es/symfony
  • 91. Object Document Mapper Jornadas Symfony http://decharlas.uji.es/symfony
  • 92. NoSQL Jornadas Symfony http://decharlas.uji.es/symfony
  • 93. NoSQL Jornadas Symfony http://decharlas.uji.es/symfony
  • 94. Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. 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. 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. 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. 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. La Vista Jornadas Symfony http://decharlas.uji.es/symfony
  • 101. 1.x 2.x slot layout partial plantilla plantilla slot component component slot Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. completo modular fácil xxxxxxxx xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. 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. <?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. $view->extend('FrontendBundle:Default:layout'); src/ Application/ FrontendBundle/ Resources/ views/ Default/ layout.php Jornadas Symfony http://decharlas.uji.es/symfony
  • 108. $view->extend('FrontendBundle::layout'); src/ Application/ FrontendBundle/ Resources/ views/ layout.php Jornadas Symfony http://decharlas.uji.es/symfony
  • 109. $view->extend('PlantillasBundle::layout'); src/ Bundle/ PlantillasBundle/ Resources/ views/ layout.php Jornadas Symfony http://decharlas.uji.es/symfony
  • 110. $view->extend( 'PlantillasBundle::layout_pagina' ); Jornadas Symfony http://decharlas.uji.es/symfony
  • 111. $view->extend( 'PlantillasBundle::layout_seccion' ); Jornadas Symfony http://decharlas.uji.es/symfony
  • 112. $view->extend( 'PlantillasBundle::layout' ); Jornadas Symfony http://decharlas.uji.es/symfony
  • 113. echo $view->render( 'SitioBundle::buscador' ) ... echo $view->render( 'NoticiasBundle:Default:ultimaHora', array('noticias' => $noticias) ) Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. $view->extend(...) $view->render(...) $view->actions->output(...) Jornadas Symfony http://decharlas.uji.es/symfony
  • 116. Helpers Jornadas Symfony http://decharlas.uji.es/symfony
  • 117. Los helpers de Symfony2 son objetos Jornadas Symfony http://decharlas.uji.es/symfony
  • 118. <a href="<?php echo $view->router->generate('portada') ?>"> Portada </a> Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. «We're trading line length for lower [code] complexity» David Heinemeier RailsConf 2010 Jornadas Symfony http://decharlas.uji.es/symfony
  • 121. Plantillas avanzadas Jornadas Symfony http://decharlas.uji.es/symfony
  • 122. twig Jornadas Symfony http://decharlas.uji.es/symfony
  • 123. PHP <h1><?php echo $oferta['titulo'] ?></h1> twig <h1>{{ oferta.titulo }}</h1> Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. 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. twig ! Código conciso ! Diseñadores ! Ultra-rápido Jornadas Symfony http://decharlas.uji.es/symfony
  • 127. El controlador Jornadas Symfony http://decharlas.uji.es/symfony
  • 128. routing.yml 1.x routing.yml 2.x bundle bundle bundle bundle Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. homepage: pattern: / defaults: { _bundle: FoundationBundle , _controller: Default, _action: index } homepage: pattern: / defaults: { _controller: FoundationBundle:Default:index } Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. oferta: pattern: /ofertas/:id ... public function ofertaAction($id) { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  • 133. oferta: pattern: /ofertas/:seccion/:categoria ... public function ofertaAction($seccion, $categoria) { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. Formularios Jornadas Symfony http://decharlas.uji.es/symfony
  • 136. 1.x Form sfForm Controlador Modelo Modelo 2.x Jornadas Symfony http://decharlas.uji.es/symfony
  • 137. 1.x sfForm Controlador Modelo 2.x Form Modelo Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. TextField TextareaField CheckboxField ChoiceField PasswordField HiddenField Jornadas Symfony http://decharlas.uji.es/symfony
  • 140. $form->add(new RepeatedField( new PasswordField('contrasena')) )); Contraseña Repite la contraseña Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. $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. TextField RepeatedField TextareaField CollectionField CheckboxField FieldGroup ChoiceField PasswordField HiddenField Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. Validación Jornadas Symfony http://decharlas.uji.es/symfony
  • 146. 1.x 2.x sfForm Form sfValidator Validador Controlador Modelo Modelo Jornadas Symfony http://decharlas.uji.es/symfony
  • 147. 1.x 2.x sfForm Form Validador sfValidator Form Controlador Validador Modelo Modelo Jornadas Symfony http://decharlas.uji.es/symfony
  • 148. ApplicationFrontendBundleModelCliente: properties: nombre: - MinLength: 3 fecha_nacimiento: - Date: ~ codigo_postal: - MaxLength: 5 Jornadas Symfony http://decharlas.uji.es/symfony
  • 149. class Cliente { public $nombre; public $fecha_nacimiento; public $codigo_postal; } Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. 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. $validador = $this->container->getService( 'validator' ); $form = new Form( 'cliente', $cliente, $validador ); Jornadas Symfony http://decharlas.uji.es/symfony
  • 153. Pruebas unitarias y funcionales Jornadas Symfony http://decharlas.uji.es/symfony
  • 154. PHPUnit 3.5 Jornadas Symfony http://decharlas.uji.es/symfony
  • 155. src/ Application/ FrontendBundle/ Model/ Article.php Tests/ Model/ ArticleTest.php Jornadas Symfony http://decharlas.uji.es/symfony
  • 156. > phpunit -c frontend/ > phpunit -c frontend/ src/Application/ FrontendBundle/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 157. > phpunit -c frontend/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 158. > phpunit -c frontend/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 159. Estándares Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. completo modular fácil estándar xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  • 162. Rendimiento Jornadas Symfony http://decharlas.uji.es/symfony
  • 163. 100 veces más rápido que symfony 1 Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. 3x 3x 4x 6x Jornadas Symfony http://decharlas.uji.es/symfony
  • 166. ! Utiliza PHP 5.3.2 Jornadas Symfony http://decharlas.uji.es/symfony
  • 167. 20 % Jornadas Symfony http://decharlas.uji.es/symfony
  • 168. ! Utiliza PHP 5.3.2 ! lazy-loading Jornadas Symfony http://decharlas.uji.es/symfony
  • 169. autoloader servicios PHP 5.3 listeners interoperability standard helpers Jornadas Symfony http://decharlas.uji.es/symfony
  • 170. ! Utiliza PHP 5.3.2 ! lazy-loading ! cache Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. ! Utiliza PHP 5.3.2 ! lazy-loading ! cache ! otros Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. ! Utiliza PHP 5.3.2 ! lazy-loading ! cache ! otros ! acelerador web Jornadas Symfony http://decharlas.uji.es/symfony
  • 175. Apache Jornadas Symfony http://decharlas.uji.es/symfony
  • 176. Squid Apache Jornadas Symfony http://decharlas.uji.es/symfony
  • 177. Squid Apache Jornadas Symfony http://decharlas.uji.es/symfony
  • 178. Symfony2 incluye un acelerador web creado con PHP Jornadas Symfony http://decharlas.uji.es/symfony
  • 179. Apache Acelerador Aplicación Jornadas Symfony http://decharlas.uji.es/symfony
  • 180. El acelerador guarda en la cache páginas completas Jornadas Symfony http://decharlas.uji.es/symfony
  • 181. $respuesta->setExpires(...); $respuesta->setMaxAge(...); $respuesta->setTtl(...); $respuesta->setLastModified(...); Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. El acelerador minimiza las veces que se ejecuta la aplicación Jornadas Symfony http://decharlas.uji.es/symfony
  • 184. Jornadas Symfony http://decharlas.uji.es/symfony
  • 185. 180 minutos 1 minuto 5 minutos 180 1 minuto 5 minutos minutos 5 minutos Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. ... <?php $view->actions->render( 'BolsaBundle::cotizaciones' ) ?> ... Jornadas Symfony http://decharlas.uji.es/symfony
  • 188. ... <?php $view->actions->render( 'BolsaBundle::cotizaciones', array('standalone' => true) ) ?> ... Jornadas Symfony http://decharlas.uji.es/symfony
  • 189. <esi:include src="..." /> Jornadas Symfony http://decharlas.uji.es/symfony
  • 190. ! Utiliza PHP 5.3.2 ! lazy-loading ! cache ! otros ! acelerador web Jornadas Symfony http://decharlas.uji.es/symfony
  • 191. 100 veces más rápido que symfony 1 Jornadas Symfony http://decharlas.uji.es/symfony
  • 192. EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO Jornadas Symfony EXCLUSIVO http://decharlas.uji.es/symfony
  • 193. completo modular fácil estándar rápido Jornadas Symfony http://decharlas.uji.es/symfony
  • 194. 50% menos memoria que symfony 1 Jornadas Symfony http://decharlas.uji.es/symfony
  • 195. Y mucho más... Jornadas Symfony http://decharlas.uji.es/symfony
  • 196. Symfony2 está ! siendo desarrollado en estos momentos Jornadas Symfony http://decharlas.uji.es/symfony
  • 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. primera versión alpha septiembre Jornadas Symfony http://decharlas.uji.es/symfony
  • 199. lanzamiento previsto finales 2010 Jornadas Symfony http://decharlas.uji.es/symfony
  • 200. Muchas gracias Jornadas Symfony http://decharlas.uji.es/symfony
  • 201. Preguntas [email protected] Jornadas Symfony http://decharlas.uji.es/symfony