SlideShare una empresa de Scribd logo
1 de 79
Descargar para leer sin conexión
Symfony2
            Framework para PHP5

Raúl Fraile Beneyto
 @raulfraile // #symfonyproweb
#symfonyproweb                   Symfony2: Framework para PHP5




Índice
  ✔
      ¿Qué es un framework y por qué usarlo?
  ✔   Frameworks PHP
  ✔   ¿Por qué elegir Symfony?
  ✔   Primeros pasos
  ✔
      Enlaces de interés
  ✔
      Preguntas


Raúl Fraile Beneyto
#symfonyproweb                                Symfony2: Framework para PHP5




¿Qué es un framework y por qué usarlo?
  ✔
       Organización del proyecto
       ✔
           Estructura de archivos y carpetas
       ✔   Estructura lógica (namespaces)
       ✔   Estilo de programación


      Ventaja: Si una nueva persona se une al proyecto,
      puede estar trabajando en él en muy poco tiempo.



Raúl Fraile Beneyto
#symfonyproweb                                  Symfony2: Framework para PHP5




¿Qué es un framework y por qué usarlo?
  ✔
       Modelo Vista Controlador integrado
        ✔
            Separación de la lógica de negocio y la
            presentación de la información.
        ✔   Varios entornos (desarrollo, test y producción).



      Ventaja: Facilidad para repartir tareas. Por ejemplo,
      los diseñadores sólamente tocarían las vistas.



Raúl Fraile Beneyto
#symfonyproweb                    Symfony2: Framework para PHP5




¿Qué es un framework y por qué usarlo?
  ✔
      Modelo Vista Controlador integrado




Raúl Fraile Beneyto
#symfonyproweb                            Symfony2: Framework para PHP5




¿Qué es un framework y por qué usarlo?
  ✔
      Bases de datos
      ✔
          Independencia del tipo de base de datos
      ✔   Mapeado en clases (entidades) del esquema
          relacional.
      ✔   Fixtures con datos de prueba.
      ✔   Optimización de consultas para el SGBD utilizado.




Raúl Fraile Beneyto
#symfonyproweb                          Symfony2: Framework para PHP5




¿Qué es un framework y por qué usarlo?
  ✔
      Detección de bugs
      ✔
          Nos proporciona más información de la pila de
          errores o excepciones.
      ✔   Sabemos exactamente si es un error del modelo
          (base de datos), de la vista o del controlador.
      ✔   Al escribir menos código hay menos posibilidades
          de generar nuevos bugs.




Raúl Fraile Beneyto
#symfonyproweb                          Symfony2: Framework para PHP5




¿Qué es un framework y por qué usarlo?
  ✔
      Publicación de la aplicación
      ✔
          Si proporciona algún método para publicar la
          aplicación en producción, evitamos olvidos al subir
          archivos o hacerlo en orden incorrecto.
      ✔   Herramientas como Ant o Phing ya hacen esa labor
          sin necesidad de un framework.




Raúl Fraile Beneyto
#symfonyproweb                          Symfony2: Framework para PHP5




¿Qué es un framework y por qué usarlo?
  ✔
      Formularios
      ✔
          Generación automática de formularios a partir del
          modelo.
      ✔   Validaciones y tipos de datos predefinidos (fechas,
          emails, URLs...).




Raúl Fraile Beneyto
#symfonyproweb                            Symfony2: Framework para PHP5




¿Qué es un framework y por qué usarlo?
  ✔   Seguridad
      ✔   Seguridad integrada ante ataques XSS (Cross-site
          scripting), CSRF (Cross Site Request Forgery), SQL
          Injection...




Raúl Fraile Beneyto
#symfonyproweb                          Symfony2: Framework para PHP5




¿Qué es un framework y por qué usarlo?
  ✔
      Otras ventajas
      ✔
          Tests integrados
      ✔   Helpers
      ✔   Caché
      ✔   Plugins
      ✔
          Posibilidad de extenderlo y adaptarlo a tus
          necesidades.



Raúl Fraile Beneyto
#symfonyproweb         Symfony2: Framework para PHP5




¿Qué es un framework y por qué usarlo?




Raúl Fraile Beneyto
#symfonyproweb                     Symfony2: Framework para PHP5




¿Qué es un framework y por qué usarlo?




                 No reinventes la rueda

Raúl Fraile Beneyto
#symfonyproweb                           Symfony2: Framework para PHP5




¿Qué es un framework y por qué usarlo?
  ✔
      También tiene algunas desventajas:
      ✔
          Te puede llegar a limitar en desarrollos algo
          “especiales”.
      ✔   Añade una nueva capa, lo que puede suponer un
          deterioro del rendimiento.
      ●   Si no lo dominas en profundidad, pueden llegar a
          ser frustrantes.




Raúl Fraile Beneyto
#symfonyproweb                      Symfony2: Framework para PHP5




¿Qué es un framework y por qué usarlo?
  ✔   En resumen: te hace la vida (un poco) más facil




Raúl Fraile Beneyto
#symfonyproweb        Symfony2: Framework para PHP5




Frameworks PHP




Raúl Fraile Beneyto
#symfonyproweb                     Symfony2: Framework para PHP5




Frameworks PHP
  ✔
      Intentan suplir algunas de las carencias de PHP
      => organización, separación de lógica y
      presentación...
  ✔
      Añadir seguridad. PHP, al ser tan “sencillo”, ha
      permitido que casi cualquiera haga
      aplicaciones web, muchas de ellas inseguras.




Raúl Fraile Beneyto
#symfonyproweb                           Symfony2: Framework para PHP5




¿Por qué elegir Symfony?

        ¿Y por qué elegir...?

        ●
          Zend Framework
        ●
          CakePHP
        ● Codeigniter

        ● Otro



     Lo mejor si tienes tiempo: probar todos los que puedas



Raúl Fraile Beneyto
#symfonyproweb                    Symfony2: Framework para PHP5




Symfony
  ✔
      Framework para PHP creado por Fabien
      Potencier (Sensio Labs).
  ✔   Open-source.
  ✔
      Comunidad muy importante.
  ✔   Excelente documentación y en diferentes
      idiomas (en versiones estables).
  ✔
      Basado en buenas prácticas.


Raúl Fraile Beneyto
#symfonyproweb                     Symfony2: Framework para PHP5




Symfony
  ✔
      La versión 1.0 salió en Enero de 2007 y
      requería PHP 5.0 + (a diferencia del resto de
      frameworks).
  ✔
      La última versión estable es la 1.4, que salió
      en Noviembre de 2009 y tendrá soporte hasta
      Noviembre 2012.
  ✔
      La versión 2 se ha reescrito desde cero.


Raúl Fraile Beneyto
#symfonyproweb                         Symfony2: Framework para PHP5




Symfony
  ✔   Actualmente se encuentra en la versión beta :

                          2.0.0BETA1

  ✔   De aquí a la versión final habrán muy pocos cambios,
      se centrarán en resolución de bugs y acortar algunos
      métodos.




Raúl Fraile Beneyto
#symfonyproweb                          Symfony2: Framework para PHP5




Symfony
  ✔
      Características principales:
      ✔
          Fácil de aprender.
      ✔   Muy flexible con la introducción de bundles
          (framework de frameworks).
      ✔   Completo.
      ✔   Rápido.
      ✔
          Utilización de estándares (PHPUnit, Zend_Cache,
          Zend_Logger, PHP 5.3 autoload, Java JSR303).


Raúl Fraile Beneyto
#symfonyproweb                Symfony2: Framework para PHP5




Symfony
  ✔
      Funcionamiento básico




Raúl Fraile Beneyto
#symfonyproweb                          Symfony2: Framework para PHP5




Symfony
  ✔
      Bundles
      ✔
          En Symfony2 TODO son bundles, incluido el propio
          framework.
      ✔   Un bundle es un “paquete” con una estructura
          definida, que puede contener cualquier cosa e
          implementa una funcionalidad.
      ✔   Permite utilizar bundles de terceros y compartir
          tus propios bundles entre distintos proyectos.



Raúl Fraile Beneyto
#symfonyproweb                                Symfony2: Framework para PHP5




Symfony
  ✔
      Bundles
      ✔
          Algunos de los bundles incluidos en la Standard
          Edition:
          ✔
              Assetic: gestor de “assets” para PHP 5.3
          –   Doctrine: ORM (object relational mapping)
          –   Monolog: sistema de logs
          –   SwiftMailer: envío de mails
          –   Twig: lenguage de plantillas



Raúl Fraile Beneyto
#symfonyproweb                         Symfony2: Framework para PHP5




Symfony
  ✔
      PHP 5.3
      ✔
          Symfony2 NO FUNCIONA con versiones inferiores a
          PHP 5.3.2.
      ✔   Esta versión de PHP introdujo mejoras importantes
          en el rendimiento (hasta un 20% de mejora) y la
          inclusión de namespaces.




Raúl Fraile Beneyto
#symfonyproweb                           Symfony2: Framework para PHP5




Symfony
  ✔
      Templates
      ✔
          Se utiliza el patrón “decorator”.
      ✔   En Symfony se pueden crear las vistas en PHP o en
          Twig.

      http://www.twig-project.org/




Raúl Fraile Beneyto
#symfonyproweb                          Symfony2: Framework para PHP5




Symfony
  ✔
      Templates: Twig
      ✔
          Lenguage pensado para que gente sin
          conocimientos de programación (p.ej.
          Maquetadores), puedan utilizar los parámetros que
          se le pasan a la vista de una manera más sencilla.
      ✔
          La primera vez que se ejecuta se cachea en PHP
          puro, por lo que su rendimiento es bueno.
      ✔   Dispone de filtros.



Raúl Fraile Beneyto
#symfonyproweb                                            Symfony2: Framework para PHP5




Symfony                                        <!DOCTYPE html>
                                               <html>
                                                  <head>
  ✔
      Templates: Twig                               <title>Post: <?php echo $titulo; ?></title>
                                                  </head>
                                                  <body>
                                                    <h1><?php echo $titulo; ?></h1>
      <!DOCTYPE html>                               <div><?php echo $contenido; ?></div>
      <html>                                        <ul>
         <head>                                        <?php foreach ($comentarios as $item){ ?>
                                                          <li><?php echo $comentario.autor; ?></li>
           <title>Post: {{ titulo }}</title>           <?php } ?>
         </head>                                    </ul>
         <body>                                   </body>
           <h1>{{ titulo }}</h1>               </html>
           <div>{{ contenido }}</div>
           <ul>
              {% for item in comentarios %}
                 <li>{{ comentario.autor }}: {{ comentario.texto }}</li>
              {% endfor %}
           </ul>
         </body>
      </html>

Raúl Fraile Beneyto
#symfonyproweb                                              Symfony2: Framework para PHP5




Symfony                                        <!DOCTYPE html>
                                               <html>
                                                  <head>
                                                    <title>Post: <?php echo $titulo; ?></title>
  ✔
      Templates: Twig                             </head>
                                                  <body>
                                                    <h1><?php echo strtoupper($titulo); ?></h1>
      <!DOCTYPE html>
      <html>                                        <h2>Fecha: <?php echo date('d/m/Y', $fecha); ?
         <head>                                ></h2>
           <title>Post: {{ titulo }}</title>        <div><?php echo $contenido; ?></div>
         </head>
         <body>                                  </body>
                                               </html>
           <h1>{{ titulo | upper }}</h1>

           <h2>Fecha: {{ fecha | date("d/m/Y") }}</h2>

           <div>{{ contenido }}</div>

        </body>
      </html>


Raúl Fraile Beneyto
#symfonyproweb                                  Symfony2: Framework para PHP5




Symfony
  ✔
      Templates: Twig
      ✔
          Algunos filtros que se pueden utilizar:
          ✔
              date, replace, url_encode, json_encode, title,
              capitalize, upper, lower, striptags, join, reverse,
              length...
      ✔   Funciones integradas
          ✔   divisibleby, none, even, odd, defined, empty...
      ✔   Puedes crear tus propias extensiones.



Raúl Fraile Beneyto
#symfonyproweb                                       Symfony2: Framework para PHP5




Symfony
  ✔
      Templates: Twig
      ✔
          Se puede integrar en algunos IDEs
          ✔
              PHPStorm 2.1+ tiene soporte nativo.
          –   Netbeans: https://github.com/blogsh/Twig-netbeans
          –   Vim: http://jinja.pocoo.org/2/documentation/integration
          –   Textmate:    https://github.com/Anomareh/PHP-Twig.tmbundle




Raúl Fraile Beneyto
#symfonyproweb                                   Symfony2: Framework para PHP5




Symfony
  ✔
      Templates: Twig
      ✔
          Utilizando el patrón “decorator”, el template
          “padre” deja huecos para que puedan ser
          rellenados por el template “hijo”.

              Padre                       Hijo
          {% block title %}   {% extends "padre.html" %}
              Blog Proweb
          {% endblock %}      {% block title %}Blog Proweb: Contacto{% endblock %}




Raúl Fraile Beneyto
#symfonyproweb                           Symfony2: Framework para PHP5




Symfony
  ✔
      Configuración
      ✔
          La configuración global de la aplicación se
          encuentra en /app/config/.
      ✔   Symfony permite configuración en YAML, XML, PHP
          o Annotations.
      ✔   También permite una configuración distinta por
          cada entorno de ejecución (dev, prod, test).




Raúl Fraile Beneyto
#symfonyproweb                                  Symfony2: Framework para PHP5




Symfony
  ✔
      Consola
      ✔
          Symfony dispone de una consola de comandos para
          poder realizar algunas de las tareas más comunes:
          ✔
              Crear bundles
          ✔
              Limpiar caché / “Calentar” caché
          ✔   Generar las entidades de la BD
          ✔
              Ejecutar una consulta SQL / DQL
          ✔   ...



Raúl Fraile Beneyto
#symfonyproweb        Symfony2: Framework para PHP5




Symfony




Raúl Fraile Beneyto
#symfonyproweb                           Symfony2: Framework para PHP5




Symfony
  ✔
      Base de datos
      ✔
          Se utiliza un ORM: Doctrine o Propel.
      ●   Doctrine mapea la base de datos relacional en
          clases (entidades). Incluso crea los getters/setters.

          doctrine:mapping:import
          doctrine:generate:entities




Raúl Fraile Beneyto
#symfonyproweb                                               Symfony2: Framework para PHP5




Symfony
  ✔   Base de datos: persistencia
          namespace ProwebBlogBundleController;

          use ProwebBlogBundleEntityPost;

          class PostController extends Controller
          {
             public function createAction()
             {
                $post = new Post();
                $post->setTitle('Charla de Symfony');
                $post->setContent('<p>La charla sobre Symfony será el 13/05.</p>');
                $post->setSlug('charla-symfony');

                    $em = $this->get('doctrine.orm.entity_manager');
                    $em->persist($post);
                    $em->flush();
                }
          ...
Raúl Fraile Beneyto
#symfonyproweb                                          Symfony2: Framework para PHP5




Symfony
  ✔   Base de datos: consultas
          public function showAction($id)
          {
               $em = $this->get('doctrine.orm.entity_manager');

                $qb = $em->createQueryBuilder();

                $qb->select('p')
                  ->from('ProwebBlogBundle:Post','p')
                  ->where('p.id = ?2');

                $query = $qb->getQuery();
                $query->setParameter(1, $id);
                $result = $query->getSingleResult();
          ...




Raúl Fraile Beneyto
#symfonyproweb                                      Symfony2: Framework para PHP5




Symfony
  ✔
      Routing
      ✔
          Se pueden definir las rutas en YAML, XML, PHP o
          Annotations.
           /**
              * @extra:Route("/post/{slug}-{id}", name="_post_view")
              * @extra:Template()
              */
             public function showAction($slug, $id)
             {
               [...]
                 return array('post'=>$post);
             }




Raúl Fraile Beneyto
#symfonyproweb                           Symfony2: Framework para PHP5




Symfony
  ✔
      Formularios
      ✔
          Se han simplificado los formularios en esta versión
          de Symfony.
      ✔   Pueden utilizar el modelo para construir los
          formularios, incluso adivinando los tipos de campos
          y validaciones.




Raúl Fraile Beneyto
#symfonyproweb                                          Symfony2: Framework para PHP5




Symfony
  ✔
      Formularios: Controlador
       $product = new Product();
       $product->name = 'Test product';
       $product->setPrice('50.00');

       $form = $this->get('form.factory')
         ->createBuilder('form', $product)
         ->add('name', 'text')
         ->add('price', 'money', array('currency' => 'USD'))
         ->getForm();

       return $this->render('AcmeStoreBundle:Default:index.html.twig', array(
                'form' => $form->createView(),
            ));



Raúl Fraile Beneyto
#symfonyproweb                                          Symfony2: Framework para PHP5




Symfony
  ✔
      Formularios: Vista
       <form action="{{ path('store_product') }}" method="post"
       {{ form_enctype(form) }}>
          {{ form_widget(form) }}

         <input type="submit" />
       </form>




Raúl Fraile Beneyto
#symfonyproweb                                            Symfony2: Framework para PHP5




Symfony
  ✔
      Formularios: Recoger datos
       $request = $this->get('request');
          if ($request->getMethod() == 'POST') {
              $form->bindRequest($request);

             if ($form->isValid()) {
                 // se guardaría en base de datos

                 return $this->redirect($this->generateUrl('store_product_success'));
             }
         }




Raúl Fraile Beneyto
#symfonyproweb                           Symfony2: Framework para PHP5




Symfony
  ✔
      Formularios: campos predefinidos
      ✔
          birthday, checkbox, choice, collection, country,
          csrf, datetime, date, entity, file, form, hidden,
          integer, language, money, number, password,
          percent, radio, repeated, textarea, text, time,
          timezone, url...




Raúl Fraile Beneyto
#symfonyproweb                         Symfony2: Framework para PHP5




Symfony
  ✔
      Admin Generator
      ✔
          En las versiones anteriores de Symfony, había un
          generador de “backend”, que permitía crear
          paneles de administración en minutos, basándose
          en la información de la base de datos y muy
          configurable.
      ✔
          En Symfony2 desaparece como parte del
          framework => AdminBundle.



Raúl Fraile Beneyto
#symfonyproweb                           Symfony2: Framework para PHP5




Symfony
                                                     @s_bergmann
  ✔
      Tests
      ●
          Symfony2 utiliza PHPUnit 3.5.11 (en esta versión
          abandonan Lime).
      ●   Cada bundle puede tener una carpeta Tests con
          todos los tests unitarios. Está configurado para que
          busque los tests en estas carpetas al hacer:

          phpunit -c app/



Raúl Fraile Beneyto
#symfonyproweb                         Symfony2: Framework para PHP5




Symfony
  ✔
      Debug
      ●
          Symfony2 proporciona una barra de herramientas
          con información muy útil: entorno de ejecución en
          el que nos encontramos, controlador que se ha
          ejecutado, logs, milisegundos, kb, consultas a la
          base de datos...




Raúl Fraile Beneyto
#symfonyproweb                          Symfony2: Framework para PHP5




Symfony
  ✔
      Debug
      ●
          También disponemos de un Profiler que almacena
          mucha información sobre la petición. Es una
          ampliación de la barra de herramientas.
      ●   Genera un código único por cada petición, por lo
          que se pueden recuperar posteriormente.




Raúl Fraile Beneyto
#symfonyproweb          Symfony2: Framework para PHP5




Symfony
  ✔
      Debug: Profiler




Raúl Fraile Beneyto
#symfonyproweb                          Symfony2: Framework para PHP5




Symfony
  ✔
      Assetic
      ✔
          Gestor de assets (archivos JS, CSS, imágenes...)
          para PHP 5.3.
      ✔   Viene incluido como Bundle en Symfony.
      ✔   Permite utilizar herramientas externas (la mayoría
          escritas en otros lenguajes como Java o C) para
          combinar varios archivos JS o CSS, hacer minify,
          optimizar imágenes, utilizar preprocesadores CSS,
          optimización de código JS...

Raúl Fraile Beneyto
#symfonyproweb                          Symfony2: Framework para PHP5




Symfony
  ✔
      Assetic: Algunas herramientas que acepta
      ✔
          Coffee Script: lenguaje más simple que JS.
      ✔   LESS: mejora CSS con variables, funciones...
      ✔   Google Closure Compiler: optimiza código JS.
      ✔   JSMin: minify de código JS.
      ✔
          YUI Compressor: minify de JS y CSS.
      ✔   OptiPNG: optimización de imágenes PNG.


Raúl Fraile Beneyto
#symfonyproweb                                     Symfony2: Framework para PHP5




Symfony
  ✔   Assetic: Ejemplo con YUI Compressor
        $core = new AssetCollection(
           array(
              new FileAsset('/js/jquery.js'),
              new GlobalAsset('/js/blog/*.js');
           ), array(
              new YuiCompressorJsFilter('/js/yui.jar');
           )
        );
        $core->load();

        header('Content-type: text/javascript');
        echo $core->dump();


Raúl Fraile Beneyto
#symfonyproweb                         Symfony2: Framework para PHP5




Symfony
  ✔
      Rendimiento
      ✔
          Según algunos benchmarks, Symfony2 es...

          2x más rápido que symfony 1.4.2
          3.5x más rápido que Zend 1.10
          5.5 más rápido que CakePHP

      ✔
          Fabien Potencier define a Symfony2 como “Fast as
          Hell”


Raúl Fraile Beneyto
#symfonyproweb        Symfony2: Framework para PHP5




Symfony
  ✔
      Rendimiento




Raúl Fraile Beneyto
#symfonyproweb                          Symfony2: Framework para PHP5




Symfony
  ✔
      Rendimiento: ¿Cómo lo consigue?
      ✔
          Utiliza PHP 5.3.2
      ✔   Lazy-loading
      ✔   Caché interna => archivos de configuración,
          templates... todo se cachea.
      ✔   HTTP Cache




Raúl Fraile Beneyto
#symfonyproweb                          Symfony2: Framework para PHP5




Symfony
  ✔
      Rendimiento: HTTP Cache
      ✔
          Se basa en la especificación HTTP/1.1 y el uso de
          ESI (Edge Side Includes), que permite cachear
          “trozos” de una misma página en tiempos
          distintos.
      ✔
          Es necesario disponer de un proxy caché (p.ej.
          Varnish o Squid). Symfony lo lleva integrado.




Raúl Fraile Beneyto
#symfonyproweb                  Symfony2: Framework para PHP5




Symfony
  ✔
      Rendimiento: HTTP Cache




Raúl Fraile Beneyto
#symfonyproweb                  Symfony2: Framework para PHP5




Symfony
  ✔
      Rendimiento: HTTP Cache




Raúl Fraile Beneyto
#symfonyproweb                  Symfony2: Framework para PHP5




Symfony
  ✔
      Rendimiento: HTTP Cache




Raúl Fraile Beneyto
#symfonyproweb                  Symfony2: Framework para PHP5




Symfony
  ✔
      Rendimiento: HTTP Cache



                                       1'
          60'         10'




Raúl Fraile Beneyto
#symfonyproweb                                      Symfony2: Framework para PHP5




Symfony
  ✔
      Rendimiento: HTTP Cache
      ✔
          Con Symfony2 podemos simular la comunicación
          “proxy cache <=> http server”, utilizando ESI.

              $this->render('NoticiasBundle:Default:destacadas.html.twig',
                             array('noticias'=>$noticias),
                             array('standalone' => true)
              );
                                                                   URL del fragmento


              <esi:include src="http://..." />


Raúl Fraile Beneyto
#symfonyproweb                   Symfony2: Framework para PHP5




Primeros pasos
  ✔
      Hay que tener en cuenta Symfony se
      encuentra actualmente en fase beta, pueden
      cambiar algunas cosas, hay bugs, la
      documentación es incompleta (y errónea en
      algunos casos)...




Raúl Fraile Beneyto
#symfonyproweb                                Symfony2: Framework para PHP5




Primeros pasos: Blog del curso Proweb
  ✔
      Descargar “Symfony Standard Edition” de
      http://symfony.com/download.

                      Symfony va a disponer de “distribuciones” (siguiendo
                      el estilo de Linux). Podrás descargar todo el framework,
                      componentes sueltos o distribuciones preparadas para
                      determinados tipos de proyectos.

                      La Standard Edition ofrece una configuración básica por
                      defecto y un bundle de prueba.




Raúl Fraile Beneyto
#symfonyproweb                   Symfony2: Framework para PHP5




Primeros pasos: Blog del curso Proweb
  ✔
      Configurar Apache para que apunte a la
      carpeta “web”. VirtualHost para acceder más
      rápidamente: http://blog_proweb/[...]
  ✔
      Para comprobar que todo está correcto
      accedemos a:

      http://blog_proweb/app_dev.php/



Raúl Fraile Beneyto
#symfonyproweb          Symfony2: Framework para PHP5




Primeros pasos: Blog del curso Proweb




Raúl Fraile Beneyto
#symfonyproweb                   Symfony2: Framework para PHP5




Primeros pasos: Blog del curso Proweb
  ✔
      Crear bundle:




  ✔   Se carga el namespace en /app/autoload.php y
      se registra en /app/AppKernel.php:


Raúl Fraile Beneyto
#symfonyproweb                     Symfony2: Framework para PHP5




Primeros pasos: Blog del curso Proweb
  ✔
      La configuración de la base de datos podemos
      hacerla manualmente (editando el archivo
      /app/config/parameters.ini) o de forma
      guiada:

      http://blog_proweb/app_dev.php/_configurat
      or/
      Servidor: localhost
      Usuario: user_blog_proweb
      Clave: 123456
      Base de datos: blog_proweb

Raúl Fraile Beneyto
#symfonyproweb          Symfony2: Framework para PHP5




Primeros pasos: Blog del curso Proweb




Raúl Fraile Beneyto
#symfonyproweb              Symfony2: Framework para PHP5




Primeros pasos: Blog del curso Proweb
  ✔
      Mapear BD en clases




Raúl Fraile Beneyto
#symfonyproweb        Symfony2: Framework para PHP5




Enlaces de interés




 symfony.com
Raúl Fraile Beneyto
#symfonyproweb        Symfony2: Framework para PHP5




Enlaces de interés




 symfony.com/blog
Raúl Fraile Beneyto
#symfonyproweb        Symfony2: Framework para PHP5




Enlaces de interés




 symfony.es
Raúl Fraile Beneyto
#symfonyproweb        Symfony2: Framework para PHP5




Enlaces de interés




 symfony2bundles.org
Raúl Fraile Beneyto
#symfonyproweb           Symfony2: Framework para PHP5




Enlaces de interés




 groups.google.com/group/symfony-users

Raúl Fraile Beneyto
#symfonyproweb        Symfony2: Framework para PHP5




Enlaces de interés




 silex-project.org
Raúl Fraile Beneyto
#symfonyproweb                          Symfony2: Framework para PHP5




Enlaces de interés
  ●
      Twitter:
      ●
          @fabpot: Creador de Symfony
      ●   @javiereguiluz: Blog de symfony.com y admin de
          symfony.es
      ●   @Kriswallsmith: Creador de Assetic
      ●   @desymfony: Jornadas Symfony en Castellón (1, 2
          y 3 de julio)



Raúl Fraile Beneyto
#symfonyproweb               Symfony2: Framework para PHP5




¡Muchas gracias!


                      ¿Preguntas?

                      Seguro que sí... ;)


Raúl Fraile Beneyto
#symfonyproweb               Symfony2: Framework para PHP5




Antes de acabar...




                 http://twtpoll.com/aazwai
Raúl Fraile Beneyto

Más contenido relacionado

Destacado

Vega A Multitude Of Solutions With Plics Plus
Vega A Multitude Of Solutions With Plics PlusVega A Multitude Of Solutions With Plics Plus
Vega A Multitude Of Solutions With Plics PlusThorne & Derrick UK
 
USAG-J Command Channel Slides 02-13-2012
USAG-J Command Channel Slides 02-13-2012USAG-J Command Channel Slides 02-13-2012
USAG-J Command Channel Slides 02-13-2012USAG Japan
 
Números primos y números compuestos
Números primos y números compuestosNúmeros primos y números compuestos
Números primos y números compuestosRodrigo Palomino
 
Como arreglar los audífonos de la entrada
Como arreglar los audífonos de la entradaComo arreglar los audífonos de la entrada
Como arreglar los audífonos de la entradaRockdrigo Gonzalez
 
Situación de Internet en Chile 2010
Situación de Internet en Chile 2010Situación de Internet en Chile 2010
Situación de Internet en Chile 2010sergioaceval
 
El alma esta en el cerebro
El alma esta en el cerebroEl alma esta en el cerebro
El alma esta en el cerebroMauricio Aguirre
 
Working with the Microsoft Office Object Models
Working with the Microsoft Office Object ModelsWorking with the Microsoft Office Object Models
Working with the Microsoft Office Object ModelsLearnNowOnline
 
Social media music industry presentation081413
Social media music industry presentation081413Social media music industry presentation081413
Social media music industry presentation081413Tiffani Clements
 
Clases a domicilio, correcciones, reseñas, traducciones.
Clases a domicilio, correcciones, reseñas, traducciones.Clases a domicilio, correcciones, reseñas, traducciones.
Clases a domicilio, correcciones, reseñas, traducciones.Antonio Salvadores
 
Projektna nastava u obrazovanju - Razvoj i provedba modula za učenje i poučav...
Projektna nastava u obrazovanju - Razvoj i provedba modula za učenje i poučav...Projektna nastava u obrazovanju - Razvoj i provedba modula za učenje i poučav...
Projektna nastava u obrazovanju - Razvoj i provedba modula za učenje i poučav...Andreja Marcetić
 
The Art & Science of SEO Audits
The Art & Science of SEO AuditsThe Art & Science of SEO Audits
The Art & Science of SEO Auditsalanbleiweiss
 
LAS 2O tendencias tecnologicas que transformaran el turismo
LAS 2O tendencias tecnologicas que transformaran el turismoLAS 2O tendencias tecnologicas que transformaran el turismo
LAS 2O tendencias tecnologicas que transformaran el turismoConsultores Hoteleros
 

Destacado (20)

Guepard
GuepardGuepard
Guepard
 
Vega A Multitude Of Solutions With Plics Plus
Vega A Multitude Of Solutions With Plics PlusVega A Multitude Of Solutions With Plics Plus
Vega A Multitude Of Solutions With Plics Plus
 
Bolivar
BolivarBolivar
Bolivar
 
Controlling
ControllingControlling
Controlling
 
USAG-J Command Channel Slides 02-13-2012
USAG-J Command Channel Slides 02-13-2012USAG-J Command Channel Slides 02-13-2012
USAG-J Command Channel Slides 02-13-2012
 
Números primos y números compuestos
Números primos y números compuestosNúmeros primos y números compuestos
Números primos y números compuestos
 
Valores
ValoresValores
Valores
 
Como arreglar los audífonos de la entrada
Como arreglar los audífonos de la entradaComo arreglar los audífonos de la entrada
Como arreglar los audífonos de la entrada
 
1_Antonio Almenara de Linking Heads
1_Antonio Almenara de Linking Heads1_Antonio Almenara de Linking Heads
1_Antonio Almenara de Linking Heads
 
Situación de Internet en Chile 2010
Situación de Internet en Chile 2010Situación de Internet en Chile 2010
Situación de Internet en Chile 2010
 
La mejora en una organización veterana en CMMI - Software Factory de Tecsidel...
La mejora en una organización veterana en CMMI - Software Factory de Tecsidel...La mejora en una organización veterana en CMMI - Software Factory de Tecsidel...
La mejora en una organización veterana en CMMI - Software Factory de Tecsidel...
 
Ud9
Ud9Ud9
Ud9
 
El alma esta en el cerebro
El alma esta en el cerebroEl alma esta en el cerebro
El alma esta en el cerebro
 
Working with the Microsoft Office Object Models
Working with the Microsoft Office Object ModelsWorking with the Microsoft Office Object Models
Working with the Microsoft Office Object Models
 
Social media music industry presentation081413
Social media music industry presentation081413Social media music industry presentation081413
Social media music industry presentation081413
 
Clases a domicilio, correcciones, reseñas, traducciones.
Clases a domicilio, correcciones, reseñas, traducciones.Clases a domicilio, correcciones, reseñas, traducciones.
Clases a domicilio, correcciones, reseñas, traducciones.
 
Projektna nastava u obrazovanju - Razvoj i provedba modula za učenje i poučav...
Projektna nastava u obrazovanju - Razvoj i provedba modula za učenje i poučav...Projektna nastava u obrazovanju - Razvoj i provedba modula za učenje i poučav...
Projektna nastava u obrazovanju - Razvoj i provedba modula za učenje i poučav...
 
The Art & Science of SEO Audits
The Art & Science of SEO AuditsThe Art & Science of SEO Audits
The Art & Science of SEO Audits
 
LAS 2O tendencias tecnologicas que transformaran el turismo
LAS 2O tendencias tecnologicas que transformaran el turismoLAS 2O tendencias tecnologicas que transformaran el turismo
LAS 2O tendencias tecnologicas que transformaran el turismo
 
Cómo crear un portal cautivo con easyhotspot
Cómo crear un  portal cautivo con easyhotspotCómo crear un  portal cautivo con easyhotspot
Cómo crear un portal cautivo con easyhotspot
 

Similar a Symfony2: Framework para PHP5

Frameworks de php
Frameworks de phpFrameworks de php
Frameworks de phpPipe Muñoz
 
Adentrándonos al Framework Symfony
Adentrándonos al  Framework SymfonyAdentrándonos al  Framework Symfony
Adentrándonos al Framework SymfonyRodrigo Miranda
 
Desarrollo de Aplicaciones Web con Symfony 5/10/2011
Desarrollo de Aplicaciones Web con Symfony 5/10/2011Desarrollo de Aplicaciones Web con Symfony 5/10/2011
Desarrollo de Aplicaciones Web con Symfony 5/10/2011gorolabs
 
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 avanzadaCé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
 
Introducción a los Frameworks PHP
Introducción a los Frameworks PHP  Introducción a los Frameworks PHP
Introducción a los Frameworks PHP Aprende PHP
 
Elementos sobre Symfony 2.1
Elementos sobre Symfony 2.1Elementos sobre Symfony 2.1
Elementos sobre Symfony 2.1Yaismel Miranda
 
Symfony2 Introducción
Symfony2 IntroducciónSymfony2 Introducción
Symfony2 Introducciónstrate
 
BilboStack - Php en el 2012
BilboStack - Php en el 2012BilboStack - Php en el 2012
BilboStack - Php en el 2012Asier Marqués
 
Joinea - mongoDB en php y Symfony2
Joinea - mongoDB en php y Symfony2Joinea - mongoDB en php y Symfony2
Joinea - mongoDB en php y Symfony2sergiovier
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasosSoni BM
 
Webinar - Radiografía actual del lenguaje PHP
Webinar - Radiografía actual del lenguaje PHPWebinar - Radiografía actual del lenguaje PHP
Webinar - Radiografía actual del lenguaje PHPArsys
 
Evidencia sesión virtual funciones php
Evidencia sesión virtual funciones phpEvidencia sesión virtual funciones php
Evidencia sesión virtual funciones phpSebastian Torres
 
Búsqueda del framework ideal de php
Búsqueda del framework ideal de phpBúsqueda del framework ideal de php
Búsqueda del framework ideal de phprvntone
 

Similar a Symfony2: Framework para PHP5 (20)

Symfony
SymfonySymfony
Symfony
 
Frameworks de php
Frameworks de phpFrameworks de php
Frameworks de php
 
Symfony dagrinchi
Symfony dagrinchiSymfony dagrinchi
Symfony dagrinchi
 
Adentrándonos al Framework Symfony
Adentrándonos al  Framework SymfonyAdentrándonos al  Framework Symfony
Adentrándonos al Framework Symfony
 
Desarrollo de Aplicaciones Web con Symfony 5/10/2011
Desarrollo de Aplicaciones Web con Symfony 5/10/2011Desarrollo de Aplicaciones Web con Symfony 5/10/2011
Desarrollo de Aplicaciones Web con Symfony 5/10/2011
 
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
 
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 ...
 
Introducción a los Frameworks PHP
Introducción a los Frameworks PHP  Introducción a los Frameworks PHP
Introducción a los Frameworks PHP
 
Symfony 1 y 2
Symfony 1 y 2Symfony 1 y 2
Symfony 1 y 2
 
Elementos sobre Symfony 2.1
Elementos sobre Symfony 2.1Elementos sobre Symfony 2.1
Elementos sobre Symfony 2.1
 
Symfony2 Introducción
Symfony2 IntroducciónSymfony2 Introducción
Symfony2 Introducción
 
BilboStack - Php en el 2012
BilboStack - Php en el 2012BilboStack - Php en el 2012
BilboStack - Php en el 2012
 
Joinea - mongoDB en php y Symfony2
Joinea - mongoDB en php y Symfony2Joinea - mongoDB en php y Symfony2
Joinea - mongoDB en php y Symfony2
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasos
 
Webinar - Radiografía actual del lenguaje PHP
Webinar - Radiografía actual del lenguaje PHPWebinar - Radiografía actual del lenguaje PHP
Webinar - Radiografía actual del lenguaje PHP
 
CRUD básico con Symfony
CRUD básico con SymfonyCRUD básico con Symfony
CRUD básico con Symfony
 
Febrero 2009 - Presentación PFC AGritos!
Febrero 2009 - Presentación PFC AGritos!Febrero 2009 - Presentación PFC AGritos!
Febrero 2009 - Presentación PFC AGritos!
 
Introducción a Silex
Introducción a SilexIntroducción a Silex
Introducción a Silex
 
Evidencia sesión virtual funciones php
Evidencia sesión virtual funciones phpEvidencia sesión virtual funciones php
Evidencia sesión virtual funciones php
 
Búsqueda del framework ideal de php
Búsqueda del framework ideal de phpBúsqueda del framework ideal de php
Búsqueda del framework ideal de php
 

Más de Raul Fraile

Aplicaciones CLI profesionales con Symfony
Aplicaciones CLI profesionales con SymfonyAplicaciones CLI profesionales con Symfony
Aplicaciones CLI profesionales con SymfonyRaul Fraile
 
Steganography: Hiding your secrets with PHP
Steganography: Hiding your secrets with PHPSteganography: Hiding your secrets with PHP
Steganography: Hiding your secrets with PHPRaul Fraile
 
How GZIP compression works - JS Conf EU 2014
How GZIP compression works - JS Conf EU 2014How GZIP compression works - JS Conf EU 2014
How GZIP compression works - JS Conf EU 2014Raul Fraile
 
How GZIP works... in 10 minutes
How GZIP works... in 10 minutesHow GZIP works... in 10 minutes
How GZIP works... in 10 minutesRaul Fraile
 
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
 
$kernel->infect(): Creating a cryptovirus for Symfony2 apps
$kernel->infect(): Creating a cryptovirus for Symfony2 apps$kernel->infect(): Creating a cryptovirus for Symfony2 apps
$kernel->infect(): Creating a cryptovirus for Symfony2 appsRaul Fraile
 
Materiales del curso de Symfony2
Materiales del curso de Symfony2Materiales del curso de Symfony2
Materiales del curso de Symfony2Raul Fraile
 
Sistemas de ficheros para dispositivos embebidos
Sistemas de ficheros para dispositivos embebidosSistemas de ficheros para dispositivos embebidos
Sistemas de ficheros para dispositivos embebidosRaul Fraile
 
Refactoring PHP/Symfony2 apps
Refactoring PHP/Symfony2 appsRefactoring PHP/Symfony2 apps
Refactoring PHP/Symfony2 appsRaul Fraile
 
Refactorización de aplicaciones PHP/Symfony2
Refactorización de aplicaciones PHP/Symfony2Refactorización de aplicaciones PHP/Symfony2
Refactorización de aplicaciones PHP/Symfony2Raul Fraile
 
MidwestPHP Symfony2 Internals
MidwestPHP Symfony2 InternalsMidwestPHP Symfony2 Internals
MidwestPHP Symfony2 InternalsRaul Fraile
 
Symfony internals [english]
Symfony internals [english]Symfony internals [english]
Symfony internals [english]Raul Fraile
 
DeSymfony 2012: Symfony internals
DeSymfony 2012: Symfony internalsDeSymfony 2012: Symfony internals
DeSymfony 2012: Symfony internalsRaul Fraile
 
Symfony2: Interacción con CSS, JS y HTML5
Symfony2: Interacción con CSS, JS y HTML5Symfony2: Interacción con CSS, JS y HTML5
Symfony2: Interacción con CSS, JS y HTML5Raul Fraile
 
Symfony2: Optimización y rendimiento
Symfony2: Optimización y rendimientoSymfony2: Optimización y rendimiento
Symfony2: Optimización y rendimientoRaul Fraile
 

Más de Raul Fraile (15)

Aplicaciones CLI profesionales con Symfony
Aplicaciones CLI profesionales con SymfonyAplicaciones CLI profesionales con Symfony
Aplicaciones CLI profesionales con Symfony
 
Steganography: Hiding your secrets with PHP
Steganography: Hiding your secrets with PHPSteganography: Hiding your secrets with PHP
Steganography: Hiding your secrets with PHP
 
How GZIP compression works - JS Conf EU 2014
How GZIP compression works - JS Conf EU 2014How GZIP compression works - JS Conf EU 2014
How GZIP compression works - JS Conf EU 2014
 
How GZIP works... in 10 minutes
How GZIP works... in 10 minutesHow GZIP works... in 10 minutes
How GZIP works... in 10 minutes
 
Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain
 
$kernel->infect(): Creating a cryptovirus for Symfony2 apps
$kernel->infect(): Creating a cryptovirus for Symfony2 apps$kernel->infect(): Creating a cryptovirus for Symfony2 apps
$kernel->infect(): Creating a cryptovirus for Symfony2 apps
 
Materiales del curso de Symfony2
Materiales del curso de Symfony2Materiales del curso de Symfony2
Materiales del curso de Symfony2
 
Sistemas de ficheros para dispositivos embebidos
Sistemas de ficheros para dispositivos embebidosSistemas de ficheros para dispositivos embebidos
Sistemas de ficheros para dispositivos embebidos
 
Refactoring PHP/Symfony2 apps
Refactoring PHP/Symfony2 appsRefactoring PHP/Symfony2 apps
Refactoring PHP/Symfony2 apps
 
Refactorización de aplicaciones PHP/Symfony2
Refactorización de aplicaciones PHP/Symfony2Refactorización de aplicaciones PHP/Symfony2
Refactorización de aplicaciones PHP/Symfony2
 
MidwestPHP Symfony2 Internals
MidwestPHP Symfony2 InternalsMidwestPHP Symfony2 Internals
MidwestPHP Symfony2 Internals
 
Symfony internals [english]
Symfony internals [english]Symfony internals [english]
Symfony internals [english]
 
DeSymfony 2012: Symfony internals
DeSymfony 2012: Symfony internalsDeSymfony 2012: Symfony internals
DeSymfony 2012: Symfony internals
 
Symfony2: Interacción con CSS, JS y HTML5
Symfony2: Interacción con CSS, JS y HTML5Symfony2: Interacción con CSS, JS y HTML5
Symfony2: Interacción con CSS, JS y HTML5
 
Symfony2: Optimización y rendimiento
Symfony2: Optimización y rendimientoSymfony2: Optimización y rendimiento
Symfony2: Optimización y rendimiento
 

Symfony2: Framework para PHP5

  • 1. Symfony2 Framework para PHP5 Raúl Fraile Beneyto @raulfraile // #symfonyproweb
  • 2. #symfonyproweb Symfony2: Framework para PHP5 Índice ✔ ¿Qué es un framework y por qué usarlo? ✔ Frameworks PHP ✔ ¿Por qué elegir Symfony? ✔ Primeros pasos ✔ Enlaces de interés ✔ Preguntas Raúl Fraile Beneyto
  • 3. #symfonyproweb Symfony2: Framework para PHP5 ¿Qué es un framework y por qué usarlo? ✔ Organización del proyecto ✔ Estructura de archivos y carpetas ✔ Estructura lógica (namespaces) ✔ Estilo de programación Ventaja: Si una nueva persona se une al proyecto, puede estar trabajando en él en muy poco tiempo. Raúl Fraile Beneyto
  • 4. #symfonyproweb Symfony2: Framework para PHP5 ¿Qué es un framework y por qué usarlo? ✔ Modelo Vista Controlador integrado ✔ Separación de la lógica de negocio y la presentación de la información. ✔ Varios entornos (desarrollo, test y producción). Ventaja: Facilidad para repartir tareas. Por ejemplo, los diseñadores sólamente tocarían las vistas. Raúl Fraile Beneyto
  • 5. #symfonyproweb Symfony2: Framework para PHP5 ¿Qué es un framework y por qué usarlo? ✔ Modelo Vista Controlador integrado Raúl Fraile Beneyto
  • 6. #symfonyproweb Symfony2: Framework para PHP5 ¿Qué es un framework y por qué usarlo? ✔ Bases de datos ✔ Independencia del tipo de base de datos ✔ Mapeado en clases (entidades) del esquema relacional. ✔ Fixtures con datos de prueba. ✔ Optimización de consultas para el SGBD utilizado. Raúl Fraile Beneyto
  • 7. #symfonyproweb Symfony2: Framework para PHP5 ¿Qué es un framework y por qué usarlo? ✔ Detección de bugs ✔ Nos proporciona más información de la pila de errores o excepciones. ✔ Sabemos exactamente si es un error del modelo (base de datos), de la vista o del controlador. ✔ Al escribir menos código hay menos posibilidades de generar nuevos bugs. Raúl Fraile Beneyto
  • 8. #symfonyproweb Symfony2: Framework para PHP5 ¿Qué es un framework y por qué usarlo? ✔ Publicación de la aplicación ✔ Si proporciona algún método para publicar la aplicación en producción, evitamos olvidos al subir archivos o hacerlo en orden incorrecto. ✔ Herramientas como Ant o Phing ya hacen esa labor sin necesidad de un framework. Raúl Fraile Beneyto
  • 9. #symfonyproweb Symfony2: Framework para PHP5 ¿Qué es un framework y por qué usarlo? ✔ Formularios ✔ Generación automática de formularios a partir del modelo. ✔ Validaciones y tipos de datos predefinidos (fechas, emails, URLs...). Raúl Fraile Beneyto
  • 10. #symfonyproweb Symfony2: Framework para PHP5 ¿Qué es un framework y por qué usarlo? ✔ Seguridad ✔ Seguridad integrada ante ataques XSS (Cross-site scripting), CSRF (Cross Site Request Forgery), SQL Injection... Raúl Fraile Beneyto
  • 11. #symfonyproweb Symfony2: Framework para PHP5 ¿Qué es un framework y por qué usarlo? ✔ Otras ventajas ✔ Tests integrados ✔ Helpers ✔ Caché ✔ Plugins ✔ Posibilidad de extenderlo y adaptarlo a tus necesidades. Raúl Fraile Beneyto
  • 12. #symfonyproweb Symfony2: Framework para PHP5 ¿Qué es un framework y por qué usarlo? Raúl Fraile Beneyto
  • 13. #symfonyproweb Symfony2: Framework para PHP5 ¿Qué es un framework y por qué usarlo? No reinventes la rueda Raúl Fraile Beneyto
  • 14. #symfonyproweb Symfony2: Framework para PHP5 ¿Qué es un framework y por qué usarlo? ✔ También tiene algunas desventajas: ✔ Te puede llegar a limitar en desarrollos algo “especiales”. ✔ Añade una nueva capa, lo que puede suponer un deterioro del rendimiento. ● Si no lo dominas en profundidad, pueden llegar a ser frustrantes. Raúl Fraile Beneyto
  • 15. #symfonyproweb Symfony2: Framework para PHP5 ¿Qué es un framework y por qué usarlo? ✔ En resumen: te hace la vida (un poco) más facil Raúl Fraile Beneyto
  • 16. #symfonyproweb Symfony2: Framework para PHP5 Frameworks PHP Raúl Fraile Beneyto
  • 17. #symfonyproweb Symfony2: Framework para PHP5 Frameworks PHP ✔ Intentan suplir algunas de las carencias de PHP => organización, separación de lógica y presentación... ✔ Añadir seguridad. PHP, al ser tan “sencillo”, ha permitido que casi cualquiera haga aplicaciones web, muchas de ellas inseguras. Raúl Fraile Beneyto
  • 18. #symfonyproweb Symfony2: Framework para PHP5 ¿Por qué elegir Symfony? ¿Y por qué elegir...? ● Zend Framework ● CakePHP ● Codeigniter ● Otro Lo mejor si tienes tiempo: probar todos los que puedas Raúl Fraile Beneyto
  • 19. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Framework para PHP creado por Fabien Potencier (Sensio Labs). ✔ Open-source. ✔ Comunidad muy importante. ✔ Excelente documentación y en diferentes idiomas (en versiones estables). ✔ Basado en buenas prácticas. Raúl Fraile Beneyto
  • 20. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ La versión 1.0 salió en Enero de 2007 y requería PHP 5.0 + (a diferencia del resto de frameworks). ✔ La última versión estable es la 1.4, que salió en Noviembre de 2009 y tendrá soporte hasta Noviembre 2012. ✔ La versión 2 se ha reescrito desde cero. Raúl Fraile Beneyto
  • 21. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Actualmente se encuentra en la versión beta : 2.0.0BETA1 ✔ De aquí a la versión final habrán muy pocos cambios, se centrarán en resolución de bugs y acortar algunos métodos. Raúl Fraile Beneyto
  • 22. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Características principales: ✔ Fácil de aprender. ✔ Muy flexible con la introducción de bundles (framework de frameworks). ✔ Completo. ✔ Rápido. ✔ Utilización de estándares (PHPUnit, Zend_Cache, Zend_Logger, PHP 5.3 autoload, Java JSR303). Raúl Fraile Beneyto
  • 23. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Funcionamiento básico Raúl Fraile Beneyto
  • 24. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Bundles ✔ En Symfony2 TODO son bundles, incluido el propio framework. ✔ Un bundle es un “paquete” con una estructura definida, que puede contener cualquier cosa e implementa una funcionalidad. ✔ Permite utilizar bundles de terceros y compartir tus propios bundles entre distintos proyectos. Raúl Fraile Beneyto
  • 25. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Bundles ✔ Algunos de los bundles incluidos en la Standard Edition: ✔ Assetic: gestor de “assets” para PHP 5.3 – Doctrine: ORM (object relational mapping) – Monolog: sistema de logs – SwiftMailer: envío de mails – Twig: lenguage de plantillas Raúl Fraile Beneyto
  • 26. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ PHP 5.3 ✔ Symfony2 NO FUNCIONA con versiones inferiores a PHP 5.3.2. ✔ Esta versión de PHP introdujo mejoras importantes en el rendimiento (hasta un 20% de mejora) y la inclusión de namespaces. Raúl Fraile Beneyto
  • 27. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Templates ✔ Se utiliza el patrón “decorator”. ✔ En Symfony se pueden crear las vistas en PHP o en Twig. http://www.twig-project.org/ Raúl Fraile Beneyto
  • 28. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Templates: Twig ✔ Lenguage pensado para que gente sin conocimientos de programación (p.ej. Maquetadores), puedan utilizar los parámetros que se le pasan a la vista de una manera más sencilla. ✔ La primera vez que se ejecuta se cachea en PHP puro, por lo que su rendimiento es bueno. ✔ Dispone de filtros. Raúl Fraile Beneyto
  • 29. #symfonyproweb Symfony2: Framework para PHP5 Symfony <!DOCTYPE html> <html> <head> ✔ Templates: Twig <title>Post: <?php echo $titulo; ?></title> </head> <body> <h1><?php echo $titulo; ?></h1> <!DOCTYPE html> <div><?php echo $contenido; ?></div> <html> <ul> <head> <?php foreach ($comentarios as $item){ ?> <li><?php echo $comentario.autor; ?></li> <title>Post: {{ titulo }}</title> <?php } ?> </head> </ul> <body> </body> <h1>{{ titulo }}</h1> </html> <div>{{ contenido }}</div> <ul> {% for item in comentarios %} <li>{{ comentario.autor }}: {{ comentario.texto }}</li> {% endfor %} </ul> </body> </html> Raúl Fraile Beneyto
  • 30. #symfonyproweb Symfony2: Framework para PHP5 Symfony <!DOCTYPE html> <html> <head> <title>Post: <?php echo $titulo; ?></title> ✔ Templates: Twig </head> <body> <h1><?php echo strtoupper($titulo); ?></h1> <!DOCTYPE html> <html> <h2>Fecha: <?php echo date('d/m/Y', $fecha); ? <head> ></h2> <title>Post: {{ titulo }}</title> <div><?php echo $contenido; ?></div> </head> <body> </body> </html> <h1>{{ titulo | upper }}</h1> <h2>Fecha: {{ fecha | date("d/m/Y") }}</h2> <div>{{ contenido }}</div> </body> </html> Raúl Fraile Beneyto
  • 31. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Templates: Twig ✔ Algunos filtros que se pueden utilizar: ✔ date, replace, url_encode, json_encode, title, capitalize, upper, lower, striptags, join, reverse, length... ✔ Funciones integradas ✔ divisibleby, none, even, odd, defined, empty... ✔ Puedes crear tus propias extensiones. Raúl Fraile Beneyto
  • 32. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Templates: Twig ✔ Se puede integrar en algunos IDEs ✔ PHPStorm 2.1+ tiene soporte nativo. – Netbeans: https://github.com/blogsh/Twig-netbeans – Vim: http://jinja.pocoo.org/2/documentation/integration – Textmate: https://github.com/Anomareh/PHP-Twig.tmbundle Raúl Fraile Beneyto
  • 33. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Templates: Twig ✔ Utilizando el patrón “decorator”, el template “padre” deja huecos para que puedan ser rellenados por el template “hijo”. Padre Hijo {% block title %} {% extends "padre.html" %} Blog Proweb {% endblock %} {% block title %}Blog Proweb: Contacto{% endblock %} Raúl Fraile Beneyto
  • 34. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Configuración ✔ La configuración global de la aplicación se encuentra en /app/config/. ✔ Symfony permite configuración en YAML, XML, PHP o Annotations. ✔ También permite una configuración distinta por cada entorno de ejecución (dev, prod, test). Raúl Fraile Beneyto
  • 35. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Consola ✔ Symfony dispone de una consola de comandos para poder realizar algunas de las tareas más comunes: ✔ Crear bundles ✔ Limpiar caché / “Calentar” caché ✔ Generar las entidades de la BD ✔ Ejecutar una consulta SQL / DQL ✔ ... Raúl Fraile Beneyto
  • 36. #symfonyproweb Symfony2: Framework para PHP5 Symfony Raúl Fraile Beneyto
  • 37. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Base de datos ✔ Se utiliza un ORM: Doctrine o Propel. ● Doctrine mapea la base de datos relacional en clases (entidades). Incluso crea los getters/setters. doctrine:mapping:import doctrine:generate:entities Raúl Fraile Beneyto
  • 38. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Base de datos: persistencia namespace ProwebBlogBundleController; use ProwebBlogBundleEntityPost; class PostController extends Controller { public function createAction() { $post = new Post(); $post->setTitle('Charla de Symfony'); $post->setContent('<p>La charla sobre Symfony será el 13/05.</p>'); $post->setSlug('charla-symfony'); $em = $this->get('doctrine.orm.entity_manager'); $em->persist($post); $em->flush(); } ... Raúl Fraile Beneyto
  • 39. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Base de datos: consultas public function showAction($id) { $em = $this->get('doctrine.orm.entity_manager'); $qb = $em->createQueryBuilder(); $qb->select('p') ->from('ProwebBlogBundle:Post','p') ->where('p.id = ?2'); $query = $qb->getQuery(); $query->setParameter(1, $id); $result = $query->getSingleResult(); ... Raúl Fraile Beneyto
  • 40. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Routing ✔ Se pueden definir las rutas en YAML, XML, PHP o Annotations. /** * @extra:Route("/post/{slug}-{id}", name="_post_view") * @extra:Template() */ public function showAction($slug, $id) { [...] return array('post'=>$post); } Raúl Fraile Beneyto
  • 41. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Formularios ✔ Se han simplificado los formularios en esta versión de Symfony. ✔ Pueden utilizar el modelo para construir los formularios, incluso adivinando los tipos de campos y validaciones. Raúl Fraile Beneyto
  • 42. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Formularios: Controlador $product = new Product(); $product->name = 'Test product'; $product->setPrice('50.00'); $form = $this->get('form.factory') ->createBuilder('form', $product) ->add('name', 'text') ->add('price', 'money', array('currency' => 'USD')) ->getForm(); return $this->render('AcmeStoreBundle:Default:index.html.twig', array( 'form' => $form->createView(), )); Raúl Fraile Beneyto
  • 43. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Formularios: Vista <form action="{{ path('store_product') }}" method="post" {{ form_enctype(form) }}> {{ form_widget(form) }} <input type="submit" /> </form> Raúl Fraile Beneyto
  • 44. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Formularios: Recoger datos $request = $this->get('request'); if ($request->getMethod() == 'POST') { $form->bindRequest($request); if ($form->isValid()) { // se guardaría en base de datos return $this->redirect($this->generateUrl('store_product_success')); } } Raúl Fraile Beneyto
  • 45. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Formularios: campos predefinidos ✔ birthday, checkbox, choice, collection, country, csrf, datetime, date, entity, file, form, hidden, integer, language, money, number, password, percent, radio, repeated, textarea, text, time, timezone, url... Raúl Fraile Beneyto
  • 46. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Admin Generator ✔ En las versiones anteriores de Symfony, había un generador de “backend”, que permitía crear paneles de administración en minutos, basándose en la información de la base de datos y muy configurable. ✔ En Symfony2 desaparece como parte del framework => AdminBundle. Raúl Fraile Beneyto
  • 47. #symfonyproweb Symfony2: Framework para PHP5 Symfony @s_bergmann ✔ Tests ● Symfony2 utiliza PHPUnit 3.5.11 (en esta versión abandonan Lime). ● Cada bundle puede tener una carpeta Tests con todos los tests unitarios. Está configurado para que busque los tests en estas carpetas al hacer: phpunit -c app/ Raúl Fraile Beneyto
  • 48. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Debug ● Symfony2 proporciona una barra de herramientas con información muy útil: entorno de ejecución en el que nos encontramos, controlador que se ha ejecutado, logs, milisegundos, kb, consultas a la base de datos... Raúl Fraile Beneyto
  • 49. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Debug ● También disponemos de un Profiler que almacena mucha información sobre la petición. Es una ampliación de la barra de herramientas. ● Genera un código único por cada petición, por lo que se pueden recuperar posteriormente. Raúl Fraile Beneyto
  • 50. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Debug: Profiler Raúl Fraile Beneyto
  • 51. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Assetic ✔ Gestor de assets (archivos JS, CSS, imágenes...) para PHP 5.3. ✔ Viene incluido como Bundle en Symfony. ✔ Permite utilizar herramientas externas (la mayoría escritas en otros lenguajes como Java o C) para combinar varios archivos JS o CSS, hacer minify, optimizar imágenes, utilizar preprocesadores CSS, optimización de código JS... Raúl Fraile Beneyto
  • 52. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Assetic: Algunas herramientas que acepta ✔ Coffee Script: lenguaje más simple que JS. ✔ LESS: mejora CSS con variables, funciones... ✔ Google Closure Compiler: optimiza código JS. ✔ JSMin: minify de código JS. ✔ YUI Compressor: minify de JS y CSS. ✔ OptiPNG: optimización de imágenes PNG. Raúl Fraile Beneyto
  • 53. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Assetic: Ejemplo con YUI Compressor $core = new AssetCollection( array( new FileAsset('/js/jquery.js'), new GlobalAsset('/js/blog/*.js'); ), array( new YuiCompressorJsFilter('/js/yui.jar'); ) ); $core->load(); header('Content-type: text/javascript'); echo $core->dump(); Raúl Fraile Beneyto
  • 54. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Rendimiento ✔ Según algunos benchmarks, Symfony2 es... 2x más rápido que symfony 1.4.2 3.5x más rápido que Zend 1.10 5.5 más rápido que CakePHP ✔ Fabien Potencier define a Symfony2 como “Fast as Hell” Raúl Fraile Beneyto
  • 55. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Rendimiento Raúl Fraile Beneyto
  • 56. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Rendimiento: ¿Cómo lo consigue? ✔ Utiliza PHP 5.3.2 ✔ Lazy-loading ✔ Caché interna => archivos de configuración, templates... todo se cachea. ✔ HTTP Cache Raúl Fraile Beneyto
  • 57. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Rendimiento: HTTP Cache ✔ Se basa en la especificación HTTP/1.1 y el uso de ESI (Edge Side Includes), que permite cachear “trozos” de una misma página en tiempos distintos. ✔ Es necesario disponer de un proxy caché (p.ej. Varnish o Squid). Symfony lo lleva integrado. Raúl Fraile Beneyto
  • 58. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Rendimiento: HTTP Cache Raúl Fraile Beneyto
  • 59. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Rendimiento: HTTP Cache Raúl Fraile Beneyto
  • 60. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Rendimiento: HTTP Cache Raúl Fraile Beneyto
  • 61. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Rendimiento: HTTP Cache 1' 60' 10' Raúl Fraile Beneyto
  • 62. #symfonyproweb Symfony2: Framework para PHP5 Symfony ✔ Rendimiento: HTTP Cache ✔ Con Symfony2 podemos simular la comunicación “proxy cache <=> http server”, utilizando ESI. $this->render('NoticiasBundle:Default:destacadas.html.twig', array('noticias'=>$noticias), array('standalone' => true) ); URL del fragmento <esi:include src="http://..." /> Raúl Fraile Beneyto
  • 63. #symfonyproweb Symfony2: Framework para PHP5 Primeros pasos ✔ Hay que tener en cuenta Symfony se encuentra actualmente en fase beta, pueden cambiar algunas cosas, hay bugs, la documentación es incompleta (y errónea en algunos casos)... Raúl Fraile Beneyto
  • 64. #symfonyproweb Symfony2: Framework para PHP5 Primeros pasos: Blog del curso Proweb ✔ Descargar “Symfony Standard Edition” de http://symfony.com/download. Symfony va a disponer de “distribuciones” (siguiendo el estilo de Linux). Podrás descargar todo el framework, componentes sueltos o distribuciones preparadas para determinados tipos de proyectos. La Standard Edition ofrece una configuración básica por defecto y un bundle de prueba. Raúl Fraile Beneyto
  • 65. #symfonyproweb Symfony2: Framework para PHP5 Primeros pasos: Blog del curso Proweb ✔ Configurar Apache para que apunte a la carpeta “web”. VirtualHost para acceder más rápidamente: http://blog_proweb/[...] ✔ Para comprobar que todo está correcto accedemos a: http://blog_proweb/app_dev.php/ Raúl Fraile Beneyto
  • 66. #symfonyproweb Symfony2: Framework para PHP5 Primeros pasos: Blog del curso Proweb Raúl Fraile Beneyto
  • 67. #symfonyproweb Symfony2: Framework para PHP5 Primeros pasos: Blog del curso Proweb ✔ Crear bundle: ✔ Se carga el namespace en /app/autoload.php y se registra en /app/AppKernel.php: Raúl Fraile Beneyto
  • 68. #symfonyproweb Symfony2: Framework para PHP5 Primeros pasos: Blog del curso Proweb ✔ La configuración de la base de datos podemos hacerla manualmente (editando el archivo /app/config/parameters.ini) o de forma guiada: http://blog_proweb/app_dev.php/_configurat or/ Servidor: localhost Usuario: user_blog_proweb Clave: 123456 Base de datos: blog_proweb Raúl Fraile Beneyto
  • 69. #symfonyproweb Symfony2: Framework para PHP5 Primeros pasos: Blog del curso Proweb Raúl Fraile Beneyto
  • 70. #symfonyproweb Symfony2: Framework para PHP5 Primeros pasos: Blog del curso Proweb ✔ Mapear BD en clases Raúl Fraile Beneyto
  • 71. #symfonyproweb Symfony2: Framework para PHP5 Enlaces de interés symfony.com Raúl Fraile Beneyto
  • 72. #symfonyproweb Symfony2: Framework para PHP5 Enlaces de interés symfony.com/blog Raúl Fraile Beneyto
  • 73. #symfonyproweb Symfony2: Framework para PHP5 Enlaces de interés symfony.es Raúl Fraile Beneyto
  • 74. #symfonyproweb Symfony2: Framework para PHP5 Enlaces de interés symfony2bundles.org Raúl Fraile Beneyto
  • 75. #symfonyproweb Symfony2: Framework para PHP5 Enlaces de interés groups.google.com/group/symfony-users Raúl Fraile Beneyto
  • 76. #symfonyproweb Symfony2: Framework para PHP5 Enlaces de interés silex-project.org Raúl Fraile Beneyto
  • 77. #symfonyproweb Symfony2: Framework para PHP5 Enlaces de interés ● Twitter: ● @fabpot: Creador de Symfony ● @javiereguiluz: Blog de symfony.com y admin de symfony.es ● @Kriswallsmith: Creador de Assetic ● @desymfony: Jornadas Symfony en Castellón (1, 2 y 3 de julio) Raúl Fraile Beneyto
  • 78. #symfonyproweb Symfony2: Framework para PHP5 ¡Muchas gracias! ¿Preguntas? Seguro que sí... ;) Raúl Fraile Beneyto
  • 79. #symfonyproweb Symfony2: Framework para PHP5 Antes de acabar... http://twtpoll.com/aazwai Raúl Fraile Beneyto