Upload
raul-fraile
View
2.610
Download
7
Embed Size (px)
DESCRIPTION
Citation preview
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: [email protected]