Upload
raul-fraile
View
4.670
Download
1
Embed Size (px)
DESCRIPTION
Symfony2: Framework para PHP5
Citation preview
Raúl Fraile Beneyto@raulfraile // #symfonyproweb
Symfony2
Framework para PHP5
Raúl Fraile Beneyto
Índice
Symfony2: Framework para PHP5#symfonyproweb
✔ ¿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
¿Qué es un framework y por qué usarlo?
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
¿Qué es un framework y por qué usarlo?
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
¿Qué es un framework y por qué usarlo?
Symfony2: Framework para PHP5#symfonyproweb
✔ Modelo Vista Controlador integrado
Raúl Fraile Beneyto
¿Qué es un framework y por qué usarlo?
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
¿Qué es un framework y por qué usarlo?
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
¿Qué es un framework y por qué usarlo?
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
¿Qué es un framework y por qué usarlo?
Symfony2: Framework para PHP5#symfonyproweb
✔ Formularios✔ Generación automática de formularios a partir del
modelo.✔ Validaciones y tipos de datos predefinidos (fechas,
emails, URLs...).
Raúl Fraile Beneyto
¿Qué es un framework y por qué usarlo?
Symfony2: Framework para PHP5#symfonyproweb
✔ Seguridad✔ Seguridad integrada ante ataques XSS (Cross-site
scripting), CSRF (Cross Site Request Forgery), SQL Injection...
Raúl Fraile Beneyto
¿Qué es un framework y por qué usarlo?
Symfony2: Framework para PHP5#symfonyproweb
✔ Otras ventajas✔ Tests integrados✔ Helpers✔ Caché✔ Plugins✔ Posibilidad de extenderlo y adaptarlo a tus
necesidades.
Raúl Fraile Beneyto
¿Qué es un framework y por qué usarlo?
Symfony2: Framework para PHP5#symfonyproweb
Raúl Fraile Beneyto
¿Qué es un framework y por qué usarlo?
Symfony2: Framework para PHP5#symfonyproweb
No reinventes la rueda
Raúl Fraile Beneyto
¿Qué es un framework y por qué usarlo?
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
¿Qué es un framework y por qué usarlo?
Symfony2: Framework para PHP5#symfonyproweb
✔ En resumen: te hace la vida (un poco) más facil
Raúl Fraile Beneyto
Frameworks PHP
Symfony2: Framework para PHP5#symfonyproweb
Raúl Fraile Beneyto
Frameworks PHP
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
¿Por qué elegir Symfony?
Symfony2: Framework para PHP5#symfonyproweb
¿Y por qué elegir...?
● Zend Framework● CakePHP● Codeigniter● Otro
Lo mejor si tienes tiempo: probar todos los que puedas
Raúl Fraile Beneyto
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ Funcionamiento básico
Raúl Fraile Beneyto
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ Templates: Twig<!DOCTYPE html><html> <head> <title>Post: {{ titulo }}</title> </head> <body> <h1>{{ titulo }}</h1> <div>{{ contenido }}</div> <ul> {% for item in comentarios %} <li>{{ comentario.autor }}: {{ comentario.texto }}</li> {% endfor %} </ul> </body></html>
<!DOCTYPE html><html> <head> <title>Post: <?php echo $titulo; ?></title> </head> <body> <h1><?php echo $titulo; ?></h1> <div><?php echo $contenido; ?></div> <ul> <?php foreach ($comentarios as $item){ ?> <li><?php echo $comentario.autor; ?></li> <?php } ?> </ul> </body></html>
Raúl Fraile Beneyto
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ Templates: Twig<!DOCTYPE html><html> <head> <title>Post: {{ titulo }}</title> </head> <body> <h1>{{ titulo | upper }}</h1> <h2>Fecha: {{ fecha | date("d/m/Y") }}</h2>
<div>{{ contenido }}</div> </body></html>
<!DOCTYPE html><html> <head> <title>Post: <?php echo $titulo; ?></title> </head> <body> <h1><?php echo strtoupper($titulo); ?></h1>
<h2>Fecha: <?php echo date('d/m/Y', $fecha); ?></h2>
<div><?php echo $contenido; ?></div> </body></html>
Raúl Fraile Beneyto
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ Templates: Twig✔ Utilizando el patrón “decorator”, el template
“padre” deja huecos para que puedan ser rellenados por el template “hijo”.
{% block title %} Blog Proweb{% endblock %}
{% extends "padre.html" %}
{% block title %}Blog Proweb: Contacto{% endblock %}
Padre Hijo
Raúl Fraile Beneyto
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
Raúl Fraile Beneyto
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ Base de datos: persistencianamespace Proweb\BlogBundle\Controller;
use Proweb\BlogBundle\Entity\Post;
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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ Base de datos: consultaspublic 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ Formularios: Vista
<form action="{{ path('store_product') }}" method="post" {{ form_enctype(form) }}> {{ form_widget(form) }}
<input type="submit" /></form>
Raúl Fraile Beneyto
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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/
@s_bergmann
Raúl Fraile Beneyto
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ Debug: Profiler
Raúl Fraile Beneyto
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ Rendimiento✔ Según algunos benchmarks, Symfony2 es...
2x más rápido que symfony 1.4.23.5x más rápido que Zend 1.105.5 más rápido que CakePHP
✔ Fabien Potencier define a Symfony2 como “Fast as Hell”
Raúl Fraile Beneyto
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ Rendimiento
Raúl Fraile Beneyto
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ Rendimiento: HTTP Cache
Raúl Fraile Beneyto
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ Rendimiento: HTTP Cache
Raúl Fraile Beneyto
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ Rendimiento: HTTP Cache
Raúl Fraile Beneyto
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ Rendimiento: HTTP Cache
60' 10'1'
Raúl Fraile Beneyto
Symfony
Symfony2: Framework para PHP5#symfonyproweb
✔ 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));
<esi:include src="http://..." />
URL del fragmento
Raúl Fraile Beneyto
Primeros pasos
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Primeros pasos: Blog del curso Proweb
Symfony2: Framework para PHP5#symfonyproweb
✔ Descargar “Symfony Standard Edition” de http://symfony.com/download.
Symfony va a disponer de “distribuciones” (siguiendoel estilo de Linux). Podrás descargar todo el framework, componentes sueltos o distribuciones preparadas paradeterminados tipos de proyectos.
La Standard Edition ofrece una configuración básica pordefecto y un bundle de prueba.
Raúl Fraile Beneyto
Primeros pasos: Blog del curso Proweb
Symfony2: Framework para PHP5#symfonyproweb
✔ 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
Primeros pasos: Blog del curso Proweb
Symfony2: Framework para PHP5#symfonyproweb
Raúl Fraile Beneyto
Primeros pasos: Blog del curso Proweb
Symfony2: Framework para PHP5#symfonyproweb
✔ Crear bundle:
✔ Se carga el namespace en /app/autoload.php y se registra en /app/AppKernel.php:
✔ Crear bundle:
Raúl Fraile Beneyto
Primeros pasos: Blog del curso Proweb
Symfony2: Framework para PHP5#symfonyproweb
✔ 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/_configurator/Servidor: localhostUsuario: user_blog_prowebClave: 123456Base de datos: blog_proweb
Raúl Fraile Beneyto
Primeros pasos: Blog del curso Proweb
Symfony2: Framework para PHP5#symfonyproweb
Raúl Fraile Beneyto
Primeros pasos: Blog del curso Proweb
Symfony2: Framework para PHP5#symfonyproweb
✔ Mapear BD en clases
Raúl Fraile Beneyto
Enlaces de interés
Symfony2: Framework para PHP5#symfonyproweb
symfony.com
Raúl Fraile Beneyto
Enlaces de interés
Symfony2: Framework para PHP5#symfonyproweb
symfony.com/blog
Raúl Fraile Beneyto
Enlaces de interés
Symfony2: Framework para PHP5#symfonyproweb
symfony.es
Raúl Fraile Beneyto
Enlaces de interés
Symfony2: Framework para PHP5#symfonyproweb
symfony2bundles.org
Raúl Fraile Beneyto
Enlaces de interés
Symfony2: Framework para PHP5#symfonyproweb
groups.google.com/group/symfony-users
Raúl Fraile Beneyto
Enlaces de interés
Symfony2: Framework para PHP5#symfonyproweb
silex-project.org
Raúl Fraile Beneyto
Enlaces de interés
Symfony2: Framework para PHP5#symfonyproweb
● 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
¡Muchas gracias!
Symfony2: Framework para PHP5#symfonyproweb
¿Preguntas?
Seguro que sí... ;)
Raúl Fraile Beneyto
Antes de acabar...
Symfony2: Framework para PHP5#symfonyproweb
http://twtpoll.com/aazwai