presentacion symfony2

Post on 05-Dec-2014

2.604 Views

Category:

Documents

7 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

@raulfraile

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

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.

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

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)

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

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Modelo Vista Controlador

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.

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.

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

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

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

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

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Symfony

Versiones

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?

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

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

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)

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Primer proyecto con 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)

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

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

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Crear un proyecto con Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Crear un proyecto con Symfony2

/web/app_dev.php (Controlador frontal)

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

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Crear un proyecto con Symfony2

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

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

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

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

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

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Acceso a base de datos

ORMs:

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

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?

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

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

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

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

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

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?

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

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

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

FormulariosAlgunos controles predefinidos en Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Característicasinteresantesde Symfony2

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Bundles

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

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

BundlesSymfony2 está formado por Bundles:

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

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Helpers

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.

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.

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.

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Tests Unitarios

PHPUnit

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/

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()

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Tests Unitarios - PHPUNit

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

PHP 5.3.2

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

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Consola

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Consola

php app/console -s

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Rápido

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Fabien Potencier : “Fast as Hell”

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

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

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

¿Cómo funciona el acelerador web?

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

¿Cómo funciona el acelerador web?

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

¿Cómo funciona el acelerador web?

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

¿Cómo funciona el acelerador web?

Acelerador

Aplicación

Apache

Guarda páginas COMPLETAS

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

10'1'

60'

60'

60'

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

¿Solución?

¿Cacheamos las páginas cada minuto?

NOSolución: ESI (Edge Side Includes)

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=”...” />

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

Enlaces deinterés

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

symfony-reloaded.org

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

symfony-project.org/blog

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

symfony.es

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

symfony2bundles.org

Raúl Fraile Beneyto

Symfony: Framework para desarrollo en PHP5

@fabpot

Symfony: Framework para desarrollo en PHP5

MUCHAS GRACIAS!!!!

Raúl Fraile Beneyto

Twitter: @raulfraile

Email: raulfraile@gmail.com

top related