Symfony2, Jornadas Symfony
Upcoming SlideShare
Loading in...5
×
 

Symfony2, Jornadas Symfony

on

  • 7,749 views

Esta presentación es la versión simplificada de la que se utilizó en las primeras Jornadas Symfony. Puedes ver la grabación en vídeo de la presentación original en http://bit.ly/symfony2

Esta presentación es la versión simplificada de la que se utilizó en las primeras Jornadas Symfony. Puedes ver la grabación en vídeo de la presentación original en http://bit.ly/symfony2

- - - - - - -


This is the simplified version of the presentation used at the first Spanish Symfony Conference. You can watch the video recording of the original presentation at http://bit.ly/symfony2

Statistics

Views

Total Views
7,749
Views on SlideShare
6,520
Embed Views
1,229

Actions

Likes
6
Downloads
179
Comments
0

10 Embeds 1,229

http://www.symfony.es 1189
http://symfony.es 28
http://localhost 3
http://www.sfexception.com 2
http://symfony2developer.com 2
http://static.slidesharecdn.com 1
http://www.google.es 1
http://symfony.lab216.com 1
http://translate.googleusercontent.com 1
http://webcache.googleusercontent.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Symfony2, Jornadas Symfony Symfony2, Jornadas Symfony Presentation Transcript

  • Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I, Castellón http://decharlas.uji.es/symfony organizan patrocinan colaboran
  • NOTA Esta presentación es la versión simplificada de la que se utilizó en las primeras Jornadas Symfony. La presentación original está llena de efectos gráficos y animaciones imposibles de utilizar en slideshare.net Puedes ver la grabación en vídeo de la presentación original en http://bit.ly/symfony2 Jornadas Symfony http://decharlas.uji.es/symfony
  • NOTE This is the simplified version of the presentation used at the first Spanish Symfony Conference. The original presentation includes lots of cool effects and animations that cannot be exported to slideshare.net You can watch the video recording of the original presentation at http://bit.ly/symfony2 Jornadas Symfony http://decharlas.uji.es/symfony
  • Symfony 2 Javier Eguíluz, symfony.es Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I, Castellón http://decharlas.uji.es/symfony
  • sesión patrocinada por www.ideatea.com Jornadas Symfony http://decharlas.uji.es/symfony
  • ¿Qué es Symfony 2? Jornadas Symfony http://decharlas.uji.es/symfony
  • symfony Jornadas Symfony http://decharlas.uji.es/symfony
  • Symfony2 Jornadas Symfony http://decharlas.uji.es/symfony
  • ¿En qué se diferencian sf 1 y sf2? Jornadas Symfony http://decharlas.uji.es/symfony
  • en todo Jornadas Symfony http://decharlas.uji.es/symfony
  • en casi todo Jornadas Symfony http://decharlas.uji.es/symfony
  • La evolución de Symfony Jornadas Symfony http://decharlas.uji.es/symfony
  • sf 1.0 2007 symfony Jornadas Symfony http://decharlas.uji.es/symfony
  • sf 1.2 2008 sfRequest sfRouting sfLogger sfI18N sfUser sfResponse sfYAML sfDatabase sfForm sfStorage sfCache sfWidget sfValidator sfEventDispatcher symfony sfOutputEscaper sfCoreAutoload Jornadas Symfony http://decharlas.uji.es/symfony
  • sf 1.4 2009 symfony Jornadas Symfony http://decharlas.uji.es/symfony
  • ¿Por qué reescribirlo todo de nuevo? Jornadas Symfony http://decharlas.uji.es/symfony
  • Problemas Muchos archivos Configuración Difícil de aprender Formularios LENTO :) Jornadas Symfony http://decharlas.uji.es/symfony
  • Nuestro primer proyecto Symfony2 Jornadas Symfony http://decharlas.uji.es/symfony
  • 5.3.2 subversion Jornadas Symfony http://decharlas.uji.es/symfony
  • > git clone http://github.com/symfony/ symfony-sandbox.git Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x symfony 1.4 8.5 MB sandbox 3.919 archivos 2.x Symfony2 3 MB sandbox 2.244 archivos Jornadas Symfony http://decharlas.uji.es/symfony
  • Demo Jornadas Symfony http://decharlas.uji.es/symfony
  • > php hello/console -s > init:app frontend frontend/ web/ --yaml > init:bundle Application/ FrontendBundle Jornadas Symfony http://decharlas.uji.es/symfony
  • El código fuente Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x 2.x <?php <?php class sfFilesystem class Filesystem { { public function mkdirs($path, $mode = 0777) public function mkdirs($path, $mode = 0777) { { if (is_dir($path)) if (is_dir($path)) { { return true; return true; } } return @mkdir($path, $mode, true); return @mkdir($path, $mode, true); } } public function touch($files) public function touch($files) { { if (!is_array($files)) { if (!is_array($files)) $files = array($files); { } $files = array($files); } foreach ($files as $file) { touch($file); foreach ($files as $file) } { } touch($file); } } Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x 2.x <?php <?php class sfFilesystem class Filesystem { { public function mkdirs($path, $mode = 0777) public function mkdirs($path, $mode = 0777) { { if (is_dir($path)) if (is_dir($path)) { { return true; return true; } } EAR return @mkdir($path, $mode, true); /P return @mkdir($path, $mode, true); } end } Z public function touch($files) public function touch($files) { { if (!is_array($files)) { if (!is_array($files)) $files = array($files); { } $files = array($files); } foreach ($files as $file) { touch($file); foreach ($files as $file) } { } touch($file); } } Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x 2.x <?php <?php class sfFilesystem class Filesystem { { public function mkdirs($path, $mode = 0777) public function mkdirs($path, $mode = 0777) { { if (is_dir($path)) if (is_dir($path)) { { return true; return true; } } return @mkdir($path, $mode, true); 2 espacios 4 espacios return @mkdir($path, $mode, true); } } public function touch($files) public function touch($files) { { if (!is_array($files)) { if (!is_array($files)) $files = array($files); { } $files = array($files); } foreach ($files as $file) { touch($file); foreach ($files as $file) } { } touch($file); } } Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x 2.x <?php <?php class sfFilesystem class Filesystem { { public function mkdirs($path, $mode = 0777) public function mkdirs($path, $mode = 0777) { { if (is_dir($path)) if (is_dir($path)) { { return true; if ( ) return true; } } if ( ) { return @mkdir($path, $mode, true); } { return @mkdir($path, $mode, true); } ... ... public function touch($files) } public function touch($files) { { if (!is_array($files)) { { } if (!is_array($files)) $files = array($files); } $files = array($files); } foreach ($files as $file) { touch($file); foreach ($files as $file) } { } touch($file); } } Jornadas Symfony http://decharlas.uji.es/symfony
  • <?php namespace SymfonyFrameworkFoundationBundle; use SymfonyComponents...ContainerInterface; use SymfonyComponentsHttpKernelRequest; use SymfonyComponentsHttpKernelResponse; use SymfonyComponents...HttpKernelInterface; class Controller { protected $container; protected $request; ... Jornadas Symfony http://decharlas.uji.es/symfony
  • namespaces Jornadas Symfony http://decharlas.uji.es/symfony
  • class Migration { ... } class Migration { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  • class sfMigration { ... } class Doctrine_Migration { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  • namespace Symfony; class Migration { ... } namespace Doctrine; class Migration { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  • namespace Symfony; namespace Doctrine; class Migration class Migration { { ... ... } } $migracion = new SymfonyMigration(); $migracion = new DoctrineMigration(); Jornadas Symfony http://decharlas.uji.es/symfony
  • SymfonyComponents SymfonyFramework SymfonyFoundation Jornadas Symfony http://decharlas.uji.es/symfony
  • SymfonyComponents BrowserKit Console CssSelector DependencyInjection DomCrawler EventDispatcher File Finder Form HttpKernel I18N OutputEscaper Process Routing Templating Validator Yaml Jornadas Symfony http://decharlas.uji.es/symfony
  • completo xxxxxx xxxxx xxxxxxxx xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  • Estructura del proyecto Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x 2.x mi_proyecto/ mi_proyecto/ apps/ frontend/ frontend/ src/ cache/ web/ config/ data/ lib/ log/ plugins/ test/ web/ Jornadas Symfony http://decharlas.uji.es/symfony
  • mi_proyecto/ frontend/ src/ web/ Jornadas Symfony http://decharlas.uji.es/symfony
  • mi_proyecto/frontend/ frontendKernel.php Jornadas Symfony http://decharlas.uji.es/symfony
  • mi_proyecto/frontend/ frontendKernel.php cache/ logs/ config/ Jornadas Symfony http://decharlas.uji.es/symfony
  • mi_proyecto/frontend/ frontendKernel.php cache/ logs/ config/ routing.yml config.yml config_dev.yml config_prod.yml Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x 2.x 7 archivos 3 archivos 124 líneas 35 líneas Jornadas Symfony http://decharlas.uji.es/symfony
  • mi_proyecto/ frontend/ src/ web/ Jornadas Symfony http://decharlas.uji.es/symfony
  • mi_proyecto/src/ autoload.php Jornadas Symfony http://decharlas.uji.es/symfony
  • mi_proyecto/src/ autoload.php Application/ Bundle/ vendor/ Jornadas Symfony http://decharlas.uji.es/symfony
  • mi_proyecto/src/ autoload.php Application/ Bundle/ vendor/ symfony/ doctrine/ zend/ Jornadas Symfony http://decharlas.uji.es/symfony
  • mi_proyecto/src/ autoload.php Application/ FrontendBundle/ Bundle/ vendor/ symfony/ doctrine/ zend/ Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x 2.x Proyecto Proyecto Aplicación Aplicación Módulo Bundle Jornadas Symfony http://decharlas.uji.es/symfony
  • Aplicación 1 Proyecto Módulo 2 Plugins Módulo 1 Módulo 3 Plugin 1 Aplicación 2 Plugin 2 Módulo 4 Módulo 5 Plugin 3 Jornadas Symfony http://decharlas.uji.es/symfony
  • Aplicación 1 Proyecto Aplicación 2 Módulo 1 Módulo 2 Módulo 3 Módulo 4 Módulo 5 Plugin 1 Plugin 2 Plugin 3 Jornadas Symfony http://decharlas.uji.es/symfony
  • Aplicación 1 Proyecto Aplicación 2 Bundle 1 Bundle 2 Bundle 3 Bundle 4 Bundle 5 Bundle 6 Bundle 7 Bundle 8 Jornadas Symfony http://decharlas.uji.es/symfony
  • Bundles (paquetes) Jornadas Symfony http://decharlas.uji.es/symfony
  • « Un bundle es un conjunto de archivos que implementan una funcionalidad » Jornadas Symfony http://decharlas.uji.es/symfony
  • Proyecto 1.x jobeet Aplicaciones frontend, backend Módulos oferta, categoría, empresa Jornadas Symfony http://decharlas.uji.es/symfony
  • Proyecto 2.x jobeet Aplicaciones frontend, backend Bundle frontend, backend Jornadas Symfony http://decharlas.uji.es/symfony
  • Proyecto 2.x jobeet Aplicaciones frontend, backend Bundle oferta, categoría, empresa Jornadas Symfony http://decharlas.uji.es/symfony
  • Proyecto 2.x jobeet Aplicaciones frontend, backend Bundle frontend, backend, oferta, categoría, empresa Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x 2.x Aplicación Módulo Bundle Plugin Librerías Jornadas Symfony http://decharlas.uji.es/symfony
  • mi_proyecto/src/ autoload.php Application/ FrontendBundle/ Bundle/ vendor/ Jornadas Symfony http://decharlas.uji.es/symfony
  • mi_proyecto/src/Application/ FrontendBundle/ Controller/ Resources/ Jornadas Symfony http://decharlas.uji.es/symfony
  • mi_proyecto/src/Application/ FrontendBundle/ Controller/ DefaultController.php Resources/ Jornadas Symfony http://decharlas.uji.es/symfony
  • mi_proyecto/src/Application/ FrontendBundle/ Controller/ DefaultController.php Resources/ config/ views/ Jornadas Symfony http://decharlas.uji.es/symfony
  • mi_proyecto/src/Application/ FrontendBundle/ Controller/ DefaultController.php Resources/ config/ routing.yml views/ index.php Jornadas Symfony http://decharlas.uji.es/symfony
  • twig Jornadas Symfony http://decharlas.uji.es/symfony
  • PropelBundle/ Command/ DependencyInjection/ Logger/ Resources/ Tests/ Jornadas Symfony http://decharlas.uji.es/symfony
  • TwigBundle/ DependencyInjection/ Extension/ Loader/ Renderer/ Resources/ Tests/ TokenParsers/ Jornadas Symfony http://decharlas.uji.es/symfony
  • Jornadas Symfony http://decharlas.uji.es/symfony
  • completo modular xxxxx xxxxxxxx xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  • Inyección de Dependencias Jornadas Symfony http://decharlas.uji.es/symfony
  • Inyección de Dependencias DI Inversion of Control IoC Jornadas Symfony http://decharlas.uji.es/symfony
  • Inyección de Dependencias DI Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x 2.x sfConfig sfProjectConfiguration sfAppConfiguration sfContext DI config handlers ... Jornadas Symfony http://decharlas.uji.es/symfony
  • Problema ¿Cómo configuro un objeto mailer para enviar emails desde mis aplicaciones? Jornadas Symfony http://decharlas.uji.es/symfony
  • public function emailAction() { $mailer = $this->getMailer(); $mensaje = Swift_Message::newInstance() ->setSubject('Asunto') ->setFrom('remitente@ejemplo.com') ->setTo('destinatario@ejemplo.com') ->setBody('Cuerpo'); $mailer->send($mensaje); ... } Jornadas Symfony http://decharlas.uji.es/symfony
  • class Mailer { function __construct() { $this->setUsername('xxxxxxxx') $this->setPassword('xxxxxxxx'); } } $mailer = $this->getMailer(); Jornadas Symfony http://decharlas.uji.es/symfony
  • class Mailer { function __construct() { $this->setUsername(MAILER_USERNAME) $this->setPassword(MAILER_PASSWORD); } } define('MAILER_USERNAME', 'xxxxxxxx'); define('MAILER_PASSWORD', 'xxxxxxxx'); $mailer = $this->getMailer(); Jornadas Symfony http://decharlas.uji.es/symfony
  • class Mailer { function __construct($user, $pass) { $this->setUsername($user) $this->setPassword($pass); } } $mailer = $this->getMailer('xxxx', 'xxxx'); Jornadas Symfony http://decharlas.uji.es/symfony
  • class Mailer { function __construct($transport) { $this->transport = $transport; } } $transport = new SMTP_Gmail($user, $pass); $mailer = $this->getMailer($transport); Jornadas Symfony http://decharlas.uji.es/symfony
  • DIC Jornadas Symfony http://decharlas.uji.es/symfony
  • D ependency I njection C ontainer Jornadas Symfony http://decharlas.uji.es/symfony
  • DIC = configuración flexible Jornadas Symfony http://decharlas.uji.es/symfony
  • frontend/config/config.yml swift.mailer: transport: gmail username: xxxxxxxx password: xxxxxxxx src/FrontendBundle/Controller/DefaultController.php public function emailAction() { $mailer = $this->getMailer(); $mensaje = Swift_Message::newInstance() ->setSubject('Asunto') ->... Jornadas Symfony http://decharlas.uji.es/symfony
  • DIC ! Objetos globales " Modelo " Tus clases Jornadas Symfony http://decharlas.uji.es/symfony
  • El modelo Jornadas Symfony http://decharlas.uji.es/symfony
  • Jornadas Symfony http://decharlas.uji.es/symfony
  • Jornadas Symfony http://decharlas.uji.es/symfony
  • ORM DBAL PDO Jornadas Symfony http://decharlas.uji.es/symfony
  • ORM ODM Jornadas Symfony http://decharlas.uji.es/symfony
  • Object Document Mapper Jornadas Symfony http://decharlas.uji.es/symfony
  • NoSQL Jornadas Symfony http://decharlas.uji.es/symfony
  • NoSQL Jornadas Symfony http://decharlas.uji.es/symfony
  • Jornadas Symfony http://decharlas.uji.es/symfony
  • doctrine:ensure-production-settings doctrine:cache:clear-metadata doctrine:cache:clear-query doctrine:clear-result doctrine:data:load doctrine:database:create doctrine:database:drop doctrine:generate:entities doctrine:generate:entity doctrine:generate:proxies doctrine:generate:repositories Jornadas Symfony http://decharlas.uji.es/symfony
  • doctrine:mapping:convert doctrine:mapping:convert-d1-schema doctrine:mapping:import doctrine:query:dql doctrine:query:sql doctrine:schema:create doctrine:schema:drop doctrine:schema:update Jornadas Symfony http://decharlas.uji.es/symfony
  • class DefaultController extends Controller { public function indexAction() { $conexion = $this->container->getService( 'database_connection' ); $ofertas = $conexion->fetchAll( 'SELECT * FROM ofertas' ); ... } } Jornadas Symfony http://decharlas.uji.es/symfony
  • class DefaultController extends Controller { public function modificarAction() { $orm = $this->getEntityManager(); $oferta = new Oferta(); $oferta->setTitulo('Programador Senior'); $orm->persist($oferta); $orm->flush(); ... } } Jornadas Symfony http://decharlas.uji.es/symfony
  • class DefaultController extends Controller { public function modificarAction() { $odm = $this->getDocumentManager(); $oferta = new Oferta(); $oferta->setTitulo('Programador Senior'); $odm->persist($oferta); $odm->flush(); ... } } Jornadas Symfony http://decharlas.uji.es/symfony
  • La Vista Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x 2.x slot layout partial plantilla plantilla slot component component slot Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x 2.x slot slot layout plantilla + slot partial plantilla plantilla plantilla component plantilla + acción component slot plantilla + acción Jornadas Symfony http://decharlas.uji.es/symfony
  • completo modular fácil xxxxxxxx xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php echo $sf_content ?> </body> </html> Jornadas Symfony http://decharlas.uji.es/symfony
  • 2.x <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php $view->slots->output('_content') ?> </body> </html> Jornadas Symfony http://decharlas.uji.es/symfony
  • <?php $view->extend( 'FrontendBundle:Default:layout' ); ?> <h1><?php echo $oferta['titulo'] ?></h1> <p><?php echo $oferta['descripcion'] ?></p> ... Jornadas Symfony http://decharlas.uji.es/symfony
  • $view->extend('FrontendBundle:Default:layout'); src/ Application/ FrontendBundle/ Resources/ views/ Default/ layout.php Jornadas Symfony http://decharlas.uji.es/symfony
  • $view->extend('FrontendBundle::layout'); src/ Application/ FrontendBundle/ Resources/ views/ layout.php Jornadas Symfony http://decharlas.uji.es/symfony
  • $view->extend('PlantillasBundle::layout'); src/ Bundle/ PlantillasBundle/ Resources/ views/ layout.php Jornadas Symfony http://decharlas.uji.es/symfony
  • $view->extend( 'PlantillasBundle::layout_pagina' ); Jornadas Symfony http://decharlas.uji.es/symfony
  • $view->extend( 'PlantillasBundle::layout_seccion' ); Jornadas Symfony http://decharlas.uji.es/symfony
  • $view->extend( 'PlantillasBundle::layout' ); Jornadas Symfony http://decharlas.uji.es/symfony
  • echo $view->render( 'SitioBundle::buscador' ) ... echo $view->render( 'NoticiasBundle:Default:ultimaHora', array('noticias' => $noticias) ) Jornadas Symfony http://decharlas.uji.es/symfony
  • echo $view->actions->output( 'BolsaBundle:Cotizaciones:indices', array('indice' => 'IBEX35') ) ... echo $view->actions->output( 'ContenidosBundle:Noticias:ultimaHora' ) Jornadas Symfony http://decharlas.uji.es/symfony
  • $view->extend(...) $view->render(...) $view->actions->output(...) Jornadas Symfony http://decharlas.uji.es/symfony
  • Helpers Jornadas Symfony http://decharlas.uji.es/symfony
  • Los helpers de Symfony2 son objetos Jornadas Symfony http://decharlas.uji.es/symfony
  • <a href="<?php echo $view->router->generate('portada') ?>"> Portada </a> Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x <?php include_stylesheets() ?> <?php use_stylesheet('main.css') ?> 2.x <?php echo $view->stylesheets ?> <?php $view->stylesheets->add('main.css') ?> Jornadas Symfony http://decharlas.uji.es/symfony
  • «We're trading line length for lower [code] complexity» David Heinemeier RailsConf 2010 Jornadas Symfony http://decharlas.uji.es/symfony
  • Plantillas avanzadas Jornadas Symfony http://decharlas.uji.es/symfony
  • twig Jornadas Symfony http://decharlas.uji.es/symfony
  • PHP <h1><?php echo $oferta['titulo'] ?></h1> twig <h1>{{ oferta.titulo }}</h1> Jornadas Symfony http://decharlas.uji.es/symfony
  • PHP <a href="<?php echo $view->router->generate('portada') ?>"> Volver a la portada </a> twig <a href="{% route 'portada' %}"> Volver a la portada </a> Jornadas Symfony http://decharlas.uji.es/symfony
  • PHP <?php foreach ($ofertas as $id => $oferta): ?> <h2><?php echo $oferta['titulo'] ?></h2> <p><?php echo $oferta['descripcion'] ?></p> ... <?php endforeach ?> twig {% for oferta in ofertas %} <h2>{{ oferta.titulo }}</h2> <p>{{ oferta.descripcion }}</p> ... {% endfor %} Jornadas Symfony http://decharlas.uji.es/symfony
  • twig ! Código conciso ! Diseñadores ! Ultra-rápido Jornadas Symfony http://decharlas.uji.es/symfony
  • El controlador Jornadas Symfony http://decharlas.uji.es/symfony
  • routing.yml 1.x routing.yml 2.x bundle bundle bundle bundle Jornadas Symfony http://decharlas.uji.es/symfony
  • apps/frontend/config/config.yml 1.x homepage: url: / param: { module: default, action: index } frontend/config/config.yml 2.x homepage: pattern: / defaults: { _bundle: FoundationBundle , _controller: Default, _action: index } Jornadas Symfony http://decharlas.uji.es/symfony
  • homepage: pattern: / defaults: { _bundle: FoundationBundle , _controller: Default, _action: index } homepage: pattern: / defaults: { _controller: FoundationBundle:Default:index } Jornadas Symfony http://decharlas.uji.es/symfony
  • frontend/config/routing.yml 2.x homepage: pattern: / defaults: { _controller: FoundationBundle:Default:index } frontend: resource: FrontendBundle/Resources/ config/routing.yml Jornadas Symfony http://decharlas.uji.es/symfony
  • oferta: pattern: /ofertas/:id ... public function ofertaAction($id) { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  • oferta: pattern: /ofertas/:seccion/:categoria ... public function ofertaAction($seccion, $categoria) { ... } Jornadas Symfony http://decharlas.uji.es/symfony
  • public function indexAction() 1.x { $this->ofertas = $ofertas; } *Se supone que la plantilla es indexSuccess.php public function indexAction() { 2.x return $this->render( 'FrontendBundle:Default:index', array('ofertas' => $ofertas) ); } Jornadas Symfony http://decharlas.uji.es/symfony
  • Formularios Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x Form sfForm Controlador Modelo Modelo 2.x Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x sfForm Controlador Modelo 2.x Form Modelo Jornadas Symfony http://decharlas.uji.es/symfony
  • $form = new Form('cliente', $cliente); $form->add(new TextField('nombre')); $form->add(new TextField('apellidos')); $form->add(new TextareaField('direccion')); Jornadas Symfony http://decharlas.uji.es/symfony
  • TextField TextareaField CheckboxField ChoiceField PasswordField HiddenField Jornadas Symfony http://decharlas.uji.es/symfony
  • $form->add(new RepeatedField( new PasswordField('contrasena')) )); Contraseña Repite la contraseña Jornadas Symfony http://decharlas.uji.es/symfony
  • $form->add(new CollectionField( new TextField('telefonos')) )); Teléfono 1 Teléfono 2 Teléfono 3 Jornadas Symfony http://decharlas.uji.es/symfony
  • $direccion = new FieldGroup('direccion'); $direccion->add(new TextField('calle')); $direccion->add(new TextField('numero')); $direccion->add(new TextField('piso')); $direccion->add(new TextField('cp')); $form->add($direccion); Dirección Calle Número Piso CP Jornadas Symfony http://decharlas.uji.es/symfony
  • TextField RepeatedField TextareaField CollectionField CheckboxField FieldGroup ChoiceField PasswordField HiddenField Jornadas Symfony http://decharlas.uji.es/symfony
  • i18n TextField RepeatedField MoneyField i18n TextareaField CollectionField DateField i18n CheckboxField FieldGroup BirthdayField i18n i18n ChoiceField NumberField TimeField i18n i18n PasswordField IntegerField DateTimeField i18n i18n HiddenField PercentField TimezoneField Jornadas Symfony http://decharlas.uji.es/symfony
  • Validación Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x 2.x sfForm Form sfValidator Validador Controlador Modelo Modelo Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x 2.x sfForm Form Validador sfValidator Form Controlador Validador Modelo Modelo Jornadas Symfony http://decharlas.uji.es/symfony
  • ApplicationFrontendBundleModelCliente: properties: nombre: - MinLength: 3 fecha_nacimiento: - Date: ~ codigo_postal: - MaxLength: 5 Jornadas Symfony http://decharlas.uji.es/symfony
  • class Cliente { public $nombre; public $fecha_nacimiento; public $codigo_postal; } Jornadas Symfony http://decharlas.uji.es/symfony
  • class Cliente { /** @Validation({ @MinLength(3) }) */ public $nombre; /** @Validation({ @Date }) */ public $fecha_nacimiento; /** @Validation({ @MaxLength(5) }) */ public $codigo_postal; } Jornadas Symfony http://decharlas.uji.es/symfony
  • JSR 303 Bean Validation Validating data is a common task that occurs throughout an application, from the presentation layer to the persistence layer. Often the same validation logic is implemented in each layer, proving to be time consuming and error-prone. To avoid duplication of these validations in each layer, developers often bundle validation logic directly into the domain model, cluttering domain classes with validation code that is, in fact, metadata about the class itself. This JSR defines a metadata model and API for JavaBean validation. The default metadata source is annotations, with the ability to override and extend the meta-data through the use of XML validation descriptors. The validation API developed by this JSR is not intended for use in any one tier or programming model. It is specifically not tied to either the web tier or the persistence tier, and is available for both server-side application programming, as well as rich client Swing application developers. This API is seen as a general extension to the Java-Beans object model, and as such is expected to be used as a core component Jornadas Symfony http://decharlas.uji.es/symfony
  • $validador = $this->container->getService( 'validator' ); $form = new Form( 'cliente', $cliente, $validador ); Jornadas Symfony http://decharlas.uji.es/symfony
  • Pruebas unitarias y funcionales Jornadas Symfony http://decharlas.uji.es/symfony
  • PHPUnit 3.5 Jornadas Symfony http://decharlas.uji.es/symfony
  • src/ Application/ FrontendBundle/ Model/ Article.php Tests/ Model/ ArticleTest.php Jornadas Symfony http://decharlas.uji.es/symfony
  • > phpunit -c frontend/ > phpunit -c frontend/ src/Application/ FrontendBundle/ Jornadas Symfony http://decharlas.uji.es/symfony
  • > phpunit -c frontend/ Jornadas Symfony http://decharlas.uji.es/symfony
  • > phpunit -c frontend/ Jornadas Symfony http://decharlas.uji.es/symfony
  • Estándares Jornadas Symfony http://decharlas.uji.es/symfony
  • 1.x 2.x sfCache Zend_Cache sfLogger Zend_Logger sfValidator Java JSR 303 autoload PHP 5.3 autoload lime PHPUnit Jornadas Symfony http://decharlas.uji.es/symfony
  • completo modular fácil estándar xxxxxx Jornadas Symfony http://decharlas.uji.es/symfony
  • Rendimiento Jornadas Symfony http://decharlas.uji.es/symfony
  • 100 veces más rápido que symfony 1 Jornadas Symfony http://decharlas.uji.es/symfony
  • depende de l tipo de benchm ark 100 veces más rápido que symfony 1 Jornadas Symfony http://decharlas.uji.es/symfony
  • 3x 3x 4x 6x Jornadas Symfony http://decharlas.uji.es/symfony
  • ! Utiliza PHP 5.3.2 Jornadas Symfony http://decharlas.uji.es/symfony
  • 20 % Jornadas Symfony http://decharlas.uji.es/symfony
  • ! Utiliza PHP 5.3.2 ! lazy-loading Jornadas Symfony http://decharlas.uji.es/symfony
  • autoloader servicios PHP 5.3 listeners interoperability standard helpers Jornadas Symfony http://decharlas.uji.es/symfony
  • ! Utiliza PHP 5.3.2 ! lazy-loading ! cache Jornadas Symfony http://decharlas.uji.es/symfony
  • cache/ frontendDevDebugProjectContainer.meta frontendDevDebugProjectContainer.php frontendUrlGenerator.meta frontendUrlGenerator.php frontendUrlMatcher.meta frontendUrlMatcher.php __TwigTemplate_a242fa75a6db74398d3e6.php Jornadas Symfony http://decharlas.uji.es/symfony
  • ! Utiliza PHP 5.3.2 ! lazy-loading ! cache ! otros Jornadas Symfony http://decharlas.uji.es/symfony
  • > route:dump RewriteCond %{PATH_INFO} ^/$ RewriteRule .* index.php [QSA,L,E=_ROUTING__route:portada,E=_ROUTING__c ontroller:FrontendBundle:Default:index] RewriteCond %{PATH_INFO} ^/ofertas/([^/.]+?)$ RewriteRule .* index.php [QSA,L,E=_ROUTING__route:oferta,E=_ROUTING_id: %1,E=_ROUTING__controller:FrontendBundle:Defau lt:oferta] Jornadas Symfony http://decharlas.uji.es/symfony
  • ! Utiliza PHP 5.3.2 ! lazy-loading ! cache ! otros ! acelerador web Jornadas Symfony http://decharlas.uji.es/symfony
  • Apache Jornadas Symfony http://decharlas.uji.es/symfony
  • Squid Apache Jornadas Symfony http://decharlas.uji.es/symfony
  • Squid Apache Jornadas Symfony http://decharlas.uji.es/symfony
  • Symfony2 incluye un acelerador web creado con PHP Jornadas Symfony http://decharlas.uji.es/symfony
  • Apache Acelerador Aplicación Jornadas Symfony http://decharlas.uji.es/symfony
  • El acelerador guarda en la cache páginas completas Jornadas Symfony http://decharlas.uji.es/symfony
  • $respuesta->setExpires(...); $respuesta->setMaxAge(...); $respuesta->setTtl(...); $respuesta->setLastModified(...); Jornadas Symfony http://decharlas.uji.es/symfony
  • public function indexAction() { $respuesta = $this->render( 'FrontendBundle:Default:index', array('ofertas' => $ofertas) ); $respuesta->setMaxAge(60); return $respuesta; } Jornadas Symfony http://decharlas.uji.es/symfony
  • El acelerador minimiza las veces que se ejecuta la aplicación Jornadas Symfony http://decharlas.uji.es/symfony
  • Jornadas Symfony http://decharlas.uji.es/symfony
  • 180 minutos 1 minuto 5 minutos 180 1 minuto 5 minutos minutos 5 minutos Jornadas Symfony http://decharlas.uji.es/symfony
  • ESI Language Specification 1.0 Edge Side Includes (ESI) is an XML-based markup language that provides a means to assemble resources in HTTP clients. Unlike other in-markup languages, ESI is designed to leverage client tools like caches to improve end-user perceived performance, reduce processing overhead on the origin server, and enhanced availability. ESI allows for dynamic content assembly at the edge of the network, whether it is in a Content Delivery Network, end-user's browser, or in a "Reverse Proxy" IETF HTTP/1.1, part 6: Caching right next to the origin server. ESI is primarily intended for processing on surrogates (intermediaries that operate on behalf of theAbstract origin server, also known as "Reverse Proxies") that understand the ESI language. However, its application is not restricted to these devices. The control of where Protocol (HTTP) is an application-level The Hypertext Transfer ESI is processed is protocol for distributed, collaborative, hypermedia information addressed in the Edge Architecture Specification. Its capability token is ESI/1.0 ESI allows surrogates to treat parts document is Part 6 of the seven-part specification systems. This of pages as cacheable resources, which gives them that ability tothe protocol referred to as "HTTP/1.1" and, taken the defines serve resources from cache in more situations. together, obsoletes RFC 2616. Part 6 defines requirements on HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages. Jornadas Symfony http://decharlas.uji.es/symfony
  • ... <?php $view->actions->render( 'BolsaBundle::cotizaciones' ) ?> ... Jornadas Symfony http://decharlas.uji.es/symfony
  • ... <?php $view->actions->render( 'BolsaBundle::cotizaciones', array('standalone' => true) ) ?> ... Jornadas Symfony http://decharlas.uji.es/symfony
  • <esi:include src="..." /> Jornadas Symfony http://decharlas.uji.es/symfony
  • ! Utiliza PHP 5.3.2 ! lazy-loading ! cache ! otros ! acelerador web Jornadas Symfony http://decharlas.uji.es/symfony
  • 100 veces más rápido que symfony 1 Jornadas Symfony http://decharlas.uji.es/symfony
  • EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO EXCLUSIVO Jornadas Symfony EXCLUSIVO http://decharlas.uji.es/symfony
  • completo modular fácil estándar rápido Jornadas Symfony http://decharlas.uji.es/symfony
  • 50% menos memoria que symfony 1 Jornadas Symfony http://decharlas.uji.es/symfony
  • Y mucho más... Jornadas Symfony http://decharlas.uji.es/symfony
  • Symfony2 está ! siendo desarrollado en estos momentos Jornadas Symfony http://decharlas.uji.es/symfony
  • autoloading eventos bundles cache formularios doctrine controlador validador propel CLI admin generator request/response configuración helpers enrutamiento base de datos i18n usuario debug logger pruebas escape mailer vista Jornadas Symfony http://decharlas.uji.es/symfony
  • primera versión alpha septiembre Jornadas Symfony http://decharlas.uji.es/symfony
  • lanzamiento previsto finales 2010 Jornadas Symfony http://decharlas.uji.es/symfony
  • Muchas gracias Jornadas Symfony http://decharlas.uji.es/symfony
  • Preguntas javier.eguiluz@gmail.com Jornadas Symfony http://decharlas.uji.es/symfony