symfony2: framework para php5

Download Symfony2: Framework para PHP5

If you can't read please download the document

Upload: raul-fraile

Post on 16-Apr-2017

11.453 views

Category:

Technology


0 download

TRANSCRIPT

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 }}

  • {% for item in comentarios %}
  • {{ comentario.autor }}: {{ comentario.texto }} {% endfor %}

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