If you can't read please download the document
Upload
raul-fraile
View
11.453
Download
0
Embed Size (px)
Citation preview
Ral Fraile Beneyto
@raulfraile // #symfonyproweb
Symfony2
Framework para PHP5
Ral 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 inters
Preguntas
Ral Fraile Beneyto
Qu es un framework y por qu usarlo?
Symfony2: Framework para PHP5
#symfonyproweb
Organizacin del proyectoEstructura de archivos y carpetas
Estructura lgica (namespaces)
Estilo de programacin
Ventaja: Si una nueva persona se une al proyecto, puede estar trabajando en l en muy poco tiempo.
Ral Fraile Beneyto
Qu es un framework y por qu usarlo?
Symfony2: Framework para PHP5
#symfonyproweb
Modelo Vista Controlador integradoSeparacin de la lgica de negocio y la presentacin de la informacin.
Varios entornos (desarrollo, test y produccin).
Ventaja: Facilidad para repartir tareas. Por ejemplo,los diseadores slamente tocaran las vistas.
Ral Fraile Beneyto
Qu es un framework y por qu usarlo?
Symfony2: Framework para PHP5
#symfonyproweb
Modelo Vista Controlador integrado
Ral Fraile Beneyto
Qu es un framework y por qu usarlo?
Symfony2: Framework para PHP5
#symfonyproweb
Bases de datosIndependencia del tipo de base de datos
Mapeado en clases (entidades) del esquema relacional.
Fixtures con datos de prueba.
Optimizacin de consultas para el SGBD utilizado.
Ral Fraile Beneyto
Qu es un framework y por qu usarlo?
Symfony2: Framework para PHP5
#symfonyproweb
Deteccin de bugsNos proporciona ms informacin 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 cdigo hay menos posibilidades de generar nuevos bugs.
Ral Fraile Beneyto
Qu es un framework y por qu usarlo?
Symfony2: Framework para PHP5
#symfonyproweb
Publicacin de la aplicacinSi proporciona algn mtodo para publicar la aplicacin en produccin, evitamos olvidos al subir archivos o hacerlo en orden incorrecto.
Herramientas como Ant o Phing ya hacen esa labor sin necesidad de un framework.
Ral Fraile Beneyto
Qu es un framework y por qu usarlo?
Symfony2: Framework para PHP5
#symfonyproweb
FormulariosGeneracin automtica de formularios a partir del modelo.
Validaciones y tipos de datos predefinidos (fechas, emails, URLs...).
Ral Fraile Beneyto
Qu es un framework y por qu usarlo?
Symfony2: Framework para PHP5
#symfonyproweb
SeguridadSeguridad integrada ante ataques XSS (Cross-site scripting), CSRF (Cross Site Request Forgery), SQL Injection...
Ral Fraile Beneyto
Qu es un framework y por qu usarlo?
Symfony2: Framework para PHP5
#symfonyproweb
Otras ventajasTests integrados
Helpers
Cach
Plugins
Posibilidad de extenderlo y adaptarlo a tus necesidades.
Ral Fraile Beneyto
Qu es un framework y por qu usarlo?
Symfony2: Framework para PHP5
#symfonyproweb
Ral Fraile Beneyto
Qu es un framework y por qu usarlo?
Symfony2: Framework para PHP5
#symfonyproweb
No reinventes la rueda
Ral Fraile Beneyto
Qu es un framework y por qu usarlo?
Symfony2: Framework para PHP5
#symfonyproweb
Tambin tiene algunas desventajas:Te puede llegar a limitar en desarrollos algo especiales.
Aade una nueva capa, lo que puede suponer un deterioro del rendimiento.
Si no lo dominas en profundidad, pueden llegar a ser frustrantes.
Ral Fraile Beneyto
Qu es un framework y por qu usarlo?
Symfony2: Framework para PHP5
#symfonyproweb
En resumen: te hace la vida (un poco) ms facil
Ral Fraile Beneyto
Frameworks PHP
Symfony2: Framework para PHP5
#symfonyproweb
Ral Fraile Beneyto
Frameworks PHP
Symfony2: Framework para PHP5
#symfonyproweb
Intentan suplir algunas de las carencias de PHP => organizacin, separacin de lgica y presentacin...
Aadir seguridad. PHP, al ser tan sencillo, ha permitido que casi cualquiera haga aplicaciones web, muchas de ellas inseguras.
Ral 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
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Framework para PHP creado por Fabien Potencier (Sensio Labs).
Open-source.
Comunidad muy importante.
Excelente documentacin y en diferentes idiomas (en versiones estables).
Basado en buenas prcticas.
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
La versin 1.0 sali en Enero de 2007 y requera PHP 5.0 + (a diferencia del resto de frameworks).
La ltima versin estable es la 1.4, que sali en Noviembre de 2009 y tendr soporte hasta Noviembre 2012.
La versin 2 se ha reescrito desde cero.
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Actualmente se encuentra en la versin beta :
2.0.0BETA1
De aqu a la versin final habrn muy pocos cambios, se centrarn en resolucin de bugs y acortar algunos mtodos.
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Caractersticas principales:Fcil de aprender.
Muy flexible con la introduccin de bundles (framework de frameworks).
Completo.
Rpido.
Utilizacin de estndares (PHPUnit, Zend_Cache, Zend_Logger, PHP 5.3 autoload, Java JSR303).
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Funcionamiento bsico
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
BundlesEn 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.
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
BundlesAlgunos 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: envo de mails
Twig: lenguage de plantillas
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
PHP 5.3Symfony2 NO FUNCIONA con versiones inferiores a PHP 5.3.2.
Esta versin de PHP introdujo mejoras importantes en el rendimiento (hasta un 20% de mejora) y la inclusin de namespaces.
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
TemplatesSe utiliza el patrn decorator.
En Symfony se pueden crear las vistas en PHP o en Twig.
http://www.twig-project.org/
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Templates: TwigLenguage pensado para que gente sin conocimientos de programacin (p.ej. Maquetadores), puedan utilizar los parmetros que se le pasan a la vista de una manera ms sencilla.
La primera vez que se ejecuta se cachea en PHP puro, por lo que su rendimiento es bueno.
Dispone de filtros.
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Templates: Twig
Post: {{ titulo }} {{ titulo }} {{ contenido }}
Post:
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Templates: Twig
Post: {{ titulo }} {{ titulo | upper }} Fecha: {{ fecha | date("d/m/Y") }}
{{ contenido }}
Post:
Fecha:
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Templates: TwigAlgunos filtros que se pueden utilizar:date, replace, url_encode, json_encode, title, capitalize, upper, lower, striptags, join, reverse, length...
Funciones integradasdivisibleby, none, even, odd, defined, empty...
Puedes crear tus propias extensiones.
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Templates: TwigSe puede integrar en algunos IDEsPHPStorm 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
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Templates: TwigUtilizando el patrn 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
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
ConfiguracinLa configuracin global de la aplicacin se encuentra en /app/config/.
Symfony permite configuracin en YAML, XML, PHP o Annotations.
Tambin permite una configuracin distinta por cada entorno de ejecucin (dev, prod, test).
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
ConsolaSymfony dispone de una consola de comandos para poder realizar algunas de las tareas ms comunes:Crear bundles
Limpiar cach / Calentar cach
Generar las entidades de la BD
Ejecutar una consulta SQL / DQL
...
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Base de datosSe utiliza un ORM: Doctrine o Propel.
Doctrine mapea la base de datos relacional en clases
(entidades). Incluso crea los getters/setters.
doctrine:mapping:importdoctrine:generate:entities
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Base de datos: persistencia
namespace 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('La charla sobre Symfony ser el 13/05.'); $post->setSlug('charla-symfony');
$em = $this->get('doctrine.orm.entity_manager'); $em->persist($post); $em->flush(); }...
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
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();...
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
RoutingSe 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); }
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
FormulariosSe han simplificado los formularios en esta versin de Symfony.
Pueden utilizar el modelo para construir los formularios, incluso adivinando los tipos de campos y validaciones.
Ral 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(), ));
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Formularios: Vista
{{ form_widget(form) }}
Ral 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 guardara en base de datos
return $this->redirect($this->generateUrl('store_product_success')); } }
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Formularios: campos predefinidosbirthday, checkbox, choice, collection, country, csrf, datetime, date, entity, file, form, hidden, integer, language, money, number, password, percent, radio, repeated, textarea, text, time, timezone, url...
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Admin GeneratorEn las versiones anteriores de Symfony, haba un generador de backend, que permita crear paneles de administracin en minutos, basndose en la informacin de la base de datos y muy configurable.
En Symfony2 desaparece como parte del framework => AdminBundle.
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Tests
Symfony2 utiliza PHPUnit 3.5.11 (en esta versin 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
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Debug
Symfony2 proporciona una barra de herramientas con informacin muy til: entorno de ejecucin en el que nos encontramos, controlador que se ha ejecutado, logs, milisegundos, kb, consultas a la base de datos...
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Debug
Tambin disponemos de un Profiler que almacena mucha informacin sobre la peticin. Es una ampliacin de la barra de herramientas.
Genera un cdigo nico por cada peticin, por lo que se pueden recuperar posteriormente.
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Debug: Profiler
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
AsseticGestor de assets (archivos JS, CSS, imgenes...) para PHP 5.3.
Viene incluido como Bundle en Symfony.
Permite utilizar herramientas externas (la mayora escritas en otros lenguajes como Java o C) para combinar varios archivos JS o CSS, hacer minify, optimizar imgenes, utilizar preprocesadores CSS, optimizacin de cdigo JS...
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Assetic: Algunas herramientas que aceptaCoffee Script: lenguaje ms simple que JS.
LESS: mejora CSS con variables, funciones...
Google Closure Compiler: optimiza cdigo JS.
JSMin: minify de cdigo JS.
YUI Compressor: minify de JS y CSS.
OptiPNG: optimizacin de imgenes PNG.
Ral 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();
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
RendimientoSegn algunos benchmarks, Symfony2 es...
2x ms rpido que symfony 1.4.2
3.5x ms rpido que Zend 1.10
5.5 ms rpido que CakePHP
Fabien Potencier define a Symfony2 como Fast as Hell
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Rendimiento
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Rendimiento: Cmo lo consigue?Utiliza PHP 5.3.2
Lazy-loading
Cach interna => archivos de configuracin, templates... todo se cachea.
HTTP Cache
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Rendimiento: HTTP CacheSe basa en la especificacin HTTP/1.1 y el uso de ESI (Edge Side Includes), que permite cachear trozos de una misma pgina en tiempos distintos.
Es necesario disponer de un proxy cach (p.ej. Varnish o Squid). Symfony lo lleva integrado.
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Rendimiento: HTTP Cache
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Rendimiento: HTTP Cache
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Rendimiento: HTTP Cache
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Rendimiento: HTTP Cache
60'10'1'
Ral Fraile Beneyto
Symfony
Symfony2: Framework para PHP5
#symfonyproweb
Rendimiento: HTTP CacheCon Symfony2 podemos simular la comunicacin proxy cache http server, utilizando ESI.
$this->render('NoticiasBundle:Default:destacadas.html.twig', array('noticias'=>$noticias), array('standalone' => true));
URL del fragmento
Ral 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 documentacin es incompleta (y errnea en algunos casos)...
Ral 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). Podrs descargar todo el framework, componentes sueltos o distribuciones preparadas paradeterminados tipos de proyectos.
La Standard Edition ofrece una configuracin bsica pordefecto y un bundle de prueba.
Ral 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 ms rpidamente: http://blog_proweb/[...]
Para comprobar que todo est correcto accedemos a:
http://blog_proweb/app_dev.php/
Ral Fraile Beneyto
Primeros pasos: Blog del curso Proweb
Symfony2: Framework para PHP5
#symfonyproweb
Ral 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:
Ral Fraile Beneyto
Primeros pasos: Blog del curso Proweb
Symfony2: Framework para PHP5
#symfonyproweb
La configuracin 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: localhost
Usuario: user_blog_proweb
Clave: 123456
Base de datos: blog_proweb
Ral Fraile Beneyto
Primeros pasos: Blog del curso Proweb
Symfony2: Framework para PHP5
#symfonyproweb
Ral Fraile Beneyto
Primeros pasos: Blog del curso Proweb
Symfony2: Framework para PHP5
#symfonyproweb
Mapear BD en clases
Ral Fraile Beneyto
Enlaces de inters
Symfony2: Framework para PHP5
#symfonyproweb
symfony.com
Ral Fraile Beneyto
Enlaces de inters
Symfony2: Framework para PHP5
#symfonyproweb
symfony.com/blog
Ral Fraile Beneyto
Enlaces de inters
Symfony2: Framework para PHP5
#symfonyproweb
symfony.es
Ral Fraile Beneyto
Enlaces de inters
Symfony2: Framework para PHP5
#symfonyproweb
symfony2bundles.org
Ral Fraile Beneyto
Enlaces de inters
Symfony2: Framework para PHP5
#symfonyproweb
groups.google.com/group/symfony-users
Ral Fraile Beneyto
Enlaces de inters
Symfony2: Framework para PHP5
#symfonyproweb
silex-project.org
Ral Fraile Beneyto
Enlaces de inters
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 Castelln (1, 2 y 3 de julio)
Ral Fraile Beneyto
Muchas gracias!
Symfony2: Framework para PHP5
#symfonyproweb
Preguntas?
Seguro que s... ;)
Ral Fraile Beneyto
Antes de acabar...
Symfony2: Framework para PHP5
#symfonyproweb
http://twtpoll.com/aazwai