presentacion symfony2

74
Raúl Fraile Beneyto Symfony: Framework para desarrollo en PHP5 @raulfraile

Upload: raul-fraile

Post on 05-Dec-2014

2.604 views

Category:

Documents


7 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

@raulfraile

Page 2: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Índice

- ¿Qué es un framework y por qué utilizarlo?- Frameworks PHP- Symfony y Symfony2- Primer proyecto con Symfony2- Características interesantes de Symfony2- Enlaces de interés

Page 3: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

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

Conjunto estandarizado de conceptos, prácticas y criterios para enfocar un tipo de problemática particular, que sirve como referencia para enfrentar y resolver nuevos problemas de índole similar.

Un framework simplifica el desarrollo de una aplicación mediantela automatización de algunos de los patrones utilizados para resolver las tareas comunes. Además, proporciona estructura al código fuente, forzando al desarrollador a crear código más legibley más fácil de mantener. Por último, facilita la programación de aplicaciones, ya que encapsula operaciones complejas en instrucciones sencillas.

Page 4: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Problemas en la fase de desarrolloDefinir una estructura lógica del proyecto

- Crear una estructura de directorios propia - ¿Dividimos por módulos? ¿Cada módulo en su carpeta? - ¿Cómo mapeamos la base de datos? - ¿Dónde metemos los tests unitarios? - ¿Cómo llamamos a la carpeta de imágenes? - …

En definitiva: Organización del proyecto

Problema: Si entra una persona nueva al proyecto hay que explicárselo TODO

Page 5: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Problemas en la fase de desarrollo

Separación de la lógica de negocio y la presentación

Aplicaciones web con un .php por cada página, que accede a base de datos,obtiene los resultados y genera el HTML, todo en el mismo fichero...

Una posible solución: Modelo Vista Controlador (MVC)

Page 6: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Modelo Vista ControladorPuerta de entrada a la aplicación:

p.ej.: index.php

Acceso a los datos

p.ej.: base de datos, serviciosWeb, ficheros externos...

Representación de los datos

p.ej.: código HTML, RSS...

Page 7: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Modelo Vista Controlador

Page 8: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Problemas en la fase de desarrolloDependencia del tipo de base de datos

A no ser que utilicemos alguna librería para acceso a base de datos, nuestras consultas serán dependientes de la base de datos utilizada. Un cambio de tipode base de datos (p.ej. De MySQL a SQL Server) nos obligaría a revisar lasconsultas.

“Mapeado” de la base de datos

Tendremos que crear una serie de clases para mapear las tablas de la base dedatos (p.ej. Tabla Producto, class.producto.php). Un cambio en las tablas obligaa modificar las clases.

Page 9: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Problemas en la fase de desarrollo

Detección de bugs

Conforme la aplicación va creciendo se va “ensuciando” y cada vez es másdificil encontrar los errores. Los tests unitarios y la obligación de mantenerla estructura pueden facilitar la tarea.

Publicar la aplicación

Si no utilizamos una herramienta tipo “Ant” o “Phing” se pueden producirerrores al olvidar subir algún archivo modificado o en orden incorrecto.

Page 10: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Problemas en la fase de desarrollo

Formularios

Tareas repetitivas de validar los datos introducidos, mostrar mensajes deerror, no perder los datos introducidos cuando se produce un error...

Seguridad de la aplicación

Defenderse ante ataques XSS (Cross-site scripting), CSRF (Cross Site Request Forgery), SQL Injection...

Page 11: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Frameworks PHP

akelos.org

framework.zend.com yiiframework.com

cakephp.org

codeigniter.com

symfony-project.org

Page 12: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Page 13: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

¿Qué es Symfony?

- Framework PHP5 - Creado por Fabien Potencier en 2007. - Open-source - Muy utilizado - Comunidad muy grande - Buena documentación - Basado en buenas prácticas

Page 14: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Symfony

Versiones

Page 15: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

¿Entonces uso Symfony 1.4 o Symfony2?

¿Proyecto nuevoo actualización?

DEPENDE... ¿Cuándo va a estar en producción?

¿Cuál es la versión actual de PHP?

Page 16: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

¿Entonces uso Symfony 1.4 o Symfony2?

Opinión personal: Aprender Symfony2

- La PR4 de Symfony2 tiene TODO lo que tendrá la versión final.

- Symfony2 le va a dar 1.000 patadas a Symfony 1.4va a ser mejor que

Page 17: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Problemas de Symfony 1.4:

- Muchos archivos - Configuración compleja - Dificil de aprender - Formularios - Rendimiento

Page 18: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Symfony2 soluciona estos problemas:

- Menos archivos - Mucho más fácil de aprender - Más flexible - Completo - Utilización de estándares (PHPUnit, Zend_Cache, Zend_Logger, PHP 5.3 autoload, Java JSR303)

Page 19: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Primer proyecto con Symfony2

Page 20: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Crear un proyecto con Symfony2

1) Bajar el sandbox GIT:

git clone http://github.com/symfony/symfony-sandbox.git

SVN:

checkout http://svn.symfony-project.com/branches/2.0

URL:

http://symfony-reloaded.org/downloads/sandbox_2_0_PR4.zip (*.tgz)

Page 21: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Crear un proyecto con Symfony2

Una carpeta por cada aplicación

Algunos scripts

TODO el código de la aplicación

Carpeta pública: CSS, JS...

Page 22: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Crear un proyecto con Symfony2

Barra de herramientas

Punto de entrada al entorno de desarrollo

Código HTML generadopor la aplicación

Page 23: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Crear un proyecto con Symfony2

Page 24: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Crear un proyecto con Symfony2

/web/app_dev.php (Controlador frontal)

Page 25: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Crear un proyecto con Symfony2

/app/config/routing.yml (Configuración global de las URL)

/src/HelloBundle/Resources/config/routing.yml (Configuración de las URL del bundle)

Configuración en cascada

Page 26: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Crear un proyecto con Symfony2

/src/Application/HelloBundle/Controller/HelloController.php (Configuración)

Page 27: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Plantillas PHP

/src/Application/HelloBundle/Resources/views/Hello/index.php (Vista)

/src/Application/HelloBundle/Resources/views/Hello/layout.php

/app/views/Hello/layout.php

Page 28: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Plantillas con Twig

Las plantillas pueden estar escritas en PHP o Twig

Twig: Template Engine

- Más facil para los diseñadores - Muy rápido (se “compila” a PHP) - Conciso - Completo

twig-project.org

Page 29: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Plantillas con Twig

/src/Application/HelloBundle/Resources/views/Hello/index.twig (Vista)

/src/Application/HelloBundle/Resources/views/Hello/layout.twig

/app/views/Hello/layout.php

Page 30: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Acceso a base de datos

BD = Estructura relacional

PHP5 y Symfony = Orientados a objetos

ORMobject-relational mapping

Evita utilizar una sintaxis específica de un sistema

de bases de datos concreto

Page 31: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Acceso a base de datos

ORMs:

Page 32: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Acceso a base de datos

/app/config/config.yml

Configuración de la Base de Datos

Si la base de datos existe, podemos pedirle a Doctrine que mapee las tablas

Comando doctrine:mapping:import

Si la base de datos NO existe, podemos crearlas clases nosotros mismos. Después, secreará la base de datos a partir de esas clases

Comandos - doctrine:database:create - doctrine:schema:create

Page 33: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Acceso a base de datos¿Cómo crearíamos una actividad nueva en la BD?

Page 34: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Acceso a base de datos¿Y obtener todas las actividades de la BD?

SELECT a.id, a.titulo, a.aforo FROM actividad a

Page 35: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Acceso a base de datos¿Y obtener todas las actividades de la BD?Plantilla:

Page 36: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

FormulariosCreamos un formulario para introducir una actividad/src/Application/HelloBundle/Controller/HelloController.php

Page 37: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

FormulariosCreamos un formulario para introducir una actividad/src/Application/HelloBundle/Resources/views/Hello/nueva.php

¿Y para recibir los datos del formulario?

Page 38: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

FormulariosCreamos un formulario para introducir una actividad/src/Application/HelloBundle/Controller/HelloController.php

Page 39: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

FormulariosAlgunos controles predefinidos en Symfony2

Page 40: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Característicasinteresantesde Symfony2

Page 41: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Bundles

Page 42: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Bundles¿Qué es un bundle?

- Un bundle es un “paquete” con una estructura definida, que puede contener cualquier cosa (clases, controladores, css...).

- Implementa una funcionalidad.

- Todo en Symfony2 son bundles.

- Sustituye a algunos conceptos de symfony 1 (plugins, librerías...)

- Permite una gran flexibilidad

Page 43: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

BundlesSymfony2 está formado por Bundles:

Page 44: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

BundlesAparte de los bundles “oficiales”, podemos añadir a nuestro proyectoBundles creados por terceros:

- FacebookBundle

- TwitterBundle

- SitemapBundle

- HTMLPurifierBundle

- La versión 4 de phpBB se está programando como bundle de Symfony2

Page 45: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Helpers

Page 46: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Helpers

A diferencia de symfony 1.4, los helpers en Symfony2 son objetos.

Nos ayudan a generar código HTML.

P.ej. Generar la ruta de una imagen:

<img src="<?php echo $view['assets']->getUrl('images/logo.png') ?>" />

Ventaja: si cambiamos el DocumentRoot, no haría falta cambiar NADA.

Page 47: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

HelpersP.ej. Incluir CSS y JavaScripts

<?php $view['javascripts']->add('js/actividades.js') ?><?php echo $view['javascripts'] ?>

<?php $view['stylesheets']->add('css/estilos.css') ?><?php echo $view['stylesheets'] ?>

Ventaja: Las vistas, al “extenderse”, se van acumulando los CSS y JS.

Page 48: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

HelpersP.ej. Generar un enlace

<a href="<?php echo $view['router']->generate('hello', array('name' => 'Raul')) ?>">¡Hola Raúl!</a>

Generaría: <a href=”/hello/Raul”>¡Hola Raúl!</a>

Ventaja: Si las rutas cambian, simplemente haría falta cambiarloen el routing.yml, y la aplicación seguiría funcionando.

Page 49: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Tests Unitarios

PHPUnit

Page 50: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Tests Unitarios - PHPUNit

Symfony2 utiliza PHPUnit 3.5 (o superior) como framework de pruebas

Manual: http://www.phpunit.de/manual/3.5/en/

Page 51: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Tests Unitarios - PHPUNit

assertArrayHasKey()assertClassHasAttribute()assertClassHasStaticAttribute()assertContains()assertContainsOnly()assertEmpty()assertEqualXMLStructure()assertEquals()assertFalse()assertFileEquals()assertFileExists()assertGreaterThan()assertGreaterThanOrEqual()assertInstanceOf()assertInternalType()assertLessThan()assertLessThanOrEqual()assertNull()assertObjectHasAttribute()assertRegExp()assertStringMatchesFormat()assertStringMatchesFormatFile()assertSame()assertSelectCount()assertSelectEquals()assertSelectRegExp()assertStringEndsWith()assertStringEqualsFile()assertStringStartsWith()assertTag()assertThat()assertTrue()assertType()assertXmlFileEqualsXmlFile()assertXmlStringEqualsXmlFile()assertXmlStringEqualsXmlString()

Page 52: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Tests Unitarios - PHPUNit

Page 53: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

PHP 5.3.2

Page 54: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

PHP 5.3.2

PHP 5.3 introdujo algunas mejoras que utiliza Symfony2 para permitir undesarrollo más rápido y con mejor rendimiento:

- Mejora en un 20% el rendimiento.

- Permite namespaces

Page 55: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Consola

Page 56: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Consola

php app/console -s

Page 57: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Rápido

Page 58: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Fabien Potencier : “Fast as Hell”

Page 59: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Symfony2 es: - 2x más rápido que symfony 1.4.2 - 3.5x más rápido que Zend 1.10 - 5.5x más rápido que CakePHP 1.2.6

Page 60: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

¿Por qué es tan rápido?

- Utiliza PHP 5.3.2

- Lazy-loading

- Caché “interna”

- Acelerador web

Page 61: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

¿Cómo funciona el acelerador web?

Page 62: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

¿Cómo funciona el acelerador web?

Page 63: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

¿Cómo funciona el acelerador web?

Page 64: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

¿Cómo funciona el acelerador web?

Acelerador

Aplicación

Apache

Guarda páginas COMPLETAS

Page 65: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

10'1'

60'

60'

60'

Page 66: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

¿Solución?

¿Cacheamos las páginas cada minuto?

NOSolución: ESI (Edge Side Includes)

Page 67: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

$this->render('HelloBundle:Hello:novedades.php');

$this->render('HelloBundle:Hello:novedades.php', array('standalone' => true));

<esi:include src=”...” />

Page 68: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Enlaces deinterés

Page 69: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

symfony-reloaded.org

Page 70: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

symfony-project.org/blog

Page 71: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

symfony.es

Page 72: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

symfony2bundles.org

Page 73: Presentacion Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

@fabpot

Page 74: Presentacion Symfony2

Symfony: Framework para desarrollo en PHP5

MUCHAS GRACIAS!!!!

Raúl Fraile Beneyto

Twitter: @raulfraile

Email: [email protected]