symfony2: framework para php5

Post on 05-Dec-2014

4.670 Views

Category:

Real Estate

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Symfony2: Framework para PHP5

TRANSCRIPT

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

top related