Symfony 2 - decharlas 2010

201
organizan patrocinan colaboran Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I, Castellón http://decharlas.uji.es/symfony
  • date post

    19-Oct-2014
  • Category

    Technology

  • view

    7.072
  • download

    0

description

Javier Eguiluz cerró las primeras jornadas symfony en Castellón habladonos del futuro Symfony2

Transcript of Symfony 2 - decharlas 2010

Page 1: Symfony 2 - decharlas 2010

organizan patrocinan

colaboran

Jornadas Symfony 5 y 6 de julio 2010Universitat Jaume I, Castellón

http://decharlas.uji.es/symfony

Page 2: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

NOTAEsta 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

Page 3: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

NOTEThis 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

Page 4: Symfony 2 - decharlas 2010

Symfony 2Javier Eguíluz, symfony.es

Jornadas Symfony 5 y 6 de julio 2010Universitat Jaume I, Castellón

http://decharlas.uji.es/symfony

Page 5: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

sesión patrocinada por

www.ideatea.com

Page 6: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

¿Qué es Symfony 2?

Page 7: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

ymfonys

Page 8: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

2S ymfony

Page 9: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

¿En qué se diferencian sf 1 y sf2?

Page 10: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

todoen

Page 11: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

todoen casi

Page 12: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

La evolución de Symfony

Page 13: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

symfony

2007sf 1.0

Page 14: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

symfony

sfRequest sfRouting sfLogger sfI18N sfUser

sfResponse sfYAML sfDatabase sfForm sfStorage

sfCache sfWidget sfValidator sfEventDispatcher

sfOutputEscaper

sfCoreAutoload

2008sf 1.2

Page 15: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

symfony

2009sf 1.4

Page 16: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

¿Por qué reescribirlo todo de nuevo?

Page 17: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Muchos archivosConfiguraciónDifícil de aprenderFormulariosL E N T O

Problemas

: )

Page 18: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Nuestro primer proyecto Symfony2

Page 19: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

5.3.2 subversion

Page 20: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

> git clone

http://github.com/symfony/

symfony-sandbox.git

Page 21: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

2.x

1.x

symfony 1.4sandbox

8.5 MB

3.919 archivos

3 MB

2.244 archivosSymfony2

sandbox

Page 22: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Demo

Page 23: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

> php hello/console -s

> init:app frontend

frontend/

web/

--yaml

> init:bundle Application/

FrontendBundle

Page 24: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

El código fuente

Page 25: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

1.x 2.x<?php

class Filesystem{ public function mkdirs($path, $mode = 0777) { if (is_dir($path)) { return true; }

return @mkdir($path, $mode, true); }

public function touch($files) { if (!is_array($files)) { $files = array($files); }

foreach ($files as $file) { touch($file); } }

<?php

class sfFilesystem{

public function mkdirs($path, $mode = 0777) { if (is_dir($path)) { return true; }

return @mkdir($path, $mode, true); }

public function touch($files) { if (!is_array($files)) { $files = array($files); }

foreach ($files as $file) { touch($file); } }

Page 26: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

1.x 2.x<?php

class Filesystem{ public function mkdirs($path, $mode = 0777) { if (is_dir($path)) { return true; }

return @mkdir($path, $mode, true); }

public function touch($files) { if (!is_array($files)) { $files = array($files); }

foreach ($files as $file) { touch($file); } }

<?php

class sfFilesystem{

public function mkdirs($path, $mode = 0777) { if (is_dir($path)) { return true; }

return @mkdir($path, $mode, true); }

public function touch($files) { if (!is_array($files)) { $files = array($files); }

foreach ($files as $file) { touch($file); } }

Zend / PEAR

Page 27: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

1.x 2.x<?php

class Filesystem{ public function mkdirs($path, $mode = 0777) { if (is_dir($path)) { return true; }

return @mkdir($path, $mode, true); }

public function touch($files) { if (!is_array($files)) { $files = array($files); }

foreach ($files as $file) { touch($file); } }

<?php

class sfFilesystem{

public function mkdirs($path, $mode = 0777) { if (is_dir($path)) { return true; }

return @mkdir($path, $mode, true); }

public function touch($files) { if (!is_array($files)) { $files = array($files); }

foreach ($files as $file) { touch($file); } }

2 espacios 4 espacios

Page 28: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

1.x 2.x<?php

class Filesystem{ public function mkdirs($path, $mode = 0777) { if (is_dir($path)) { return true; }

return @mkdir($path, $mode, true); }

public function touch($files) { if (!is_array($files)) { $files = array($files); }

foreach ($files as $file) { touch($file); } }

<?php

class sfFilesystem{

public function mkdirs($path, $mode = 0777) { if (is_dir($path)) { return true; }

return @mkdir($path, $mode, true); }

public function touch($files) { if (!is_array($files)) { $files = array($files); }

foreach ($files as $file) { touch($file); } }

if ( ){ ...}

if ( ) { ...}

Page 29: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

<?php

namespace Symfony\Framework\FoundationBundle;

use Symfony\Components\...\ContainerInterface;

use Symfony\Components\HttpKernel\Request;

use Symfony\Components\HttpKernel\Response;

use Symfony\Components\...\HttpKernelInterface;

class Controller

{

protected $container;

protected $request;

...

Page 30: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

namespaces

Page 31: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

class Migration

{

...

}

class Migration

{

...

}

Page 32: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

class sfMigration

{

...

}

class Doctrine_Migration

{

...

}

Page 33: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

namespace Symfony;

class Migration

{

...

}

namespace Doctrine;

class Migration

{

...

}

Page 34: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

namespace Symfony;

class Migration

{

...

}

namespace Doctrine;

class Migration

{

...

}

$migracion = new \Symfony\Migration();

$migracion = new \Doctrine\Migration();

Page 35: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Symfony\ComponentsSymfony\Framework

Symfony\Foundation

Page 36: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Symfony\ComponentsBrowserKit Console CssSelector

DependencyInjectionDependencyInjection DomCrawler

EventDispatcher File Finder

Form HttpKernel I18N

OutputEscaper Process Routing

Templating Validator Yaml

Page 37: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

xxxxxx

xxxxxxxxxxxxx

completo

xxxxxx

Page 38: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Estructura del proyecto

Page 39: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

2.xmi_proyecto/ apps/ frontend/ cache/ config/ data/ lib/ log/ plugins/ test/ web/

mi_proyecto/ frontend/ src/ web/

1.x

Page 40: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

mi_proyecto/ frontend/ src/ web/

Page 41: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

mi_proyecto/frontend/ frontendKernel.php

Page 42: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

mi_proyecto/frontend/ frontendKernel.php cache/ logs/ config/

Page 43: Symfony 2 - decharlas 2010

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

Page 44: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

2.x1.x

7 archivos

124 líneas

3 archivos

35 líneas

Page 45: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

mi_proyecto/ frontend/ src/ web/

Page 46: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

mi_proyecto/src/ autoload.php

Page 47: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

mi_proyecto/src/ autoload.php Application/ Bundle/ vendor/

Page 48: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

mi_proyecto/src/ autoload.php Application/ Bundle/ vendor/ symfony/ doctrine/ zend/

Page 49: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

mi_proyecto/src/ autoload.php Application/ FrontendBundle/ Bundle/ vendor/ symfony/ doctrine/ zend/

Page 50: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

2.x

Proyecto

Aplicación

Módulo

1.x

Proyecto

Aplicación

Bundle

Page 51: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

ProyectoAplicación 1

Aplicación 2

Módulo 1

Módulo 2

Módulo 3

Módulo 4 Módulo 5

Plugins

Plugin 2

Plugin 1

Plugin 3

Page 52: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

ProyectoAplicación 1

Aplicación 2

Módulo 1 Módulo 2 Módulo 3

Módulo 4 Módulo 5

Plugin 2

Plugin 1

Plugin 3

Page 53: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

ProyectoAplicación 1

Aplicación 2

Bundle 1 Bundle 2 Bundle 3

Bundle 4 Bundle 5

Bundle 7

Bundle 6

Bundle 8

Page 54: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Bundles(paquetes)

Page 55: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

« Un bundle es un conjunto de archivos que implementan una

funcionalidad »

Page 56: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

1.x

oferta, categoría, empresa

Proyecto

jobeet

Aplicacionesfrontend, backend

Módulos

Page 57: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

2.x

frontend, backend

Proyecto

jobeet

Aplicacionesfrontend, backend

Bundle

Page 58: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

2.x

oferta, categoría, empresa

Proyecto

jobeet

Aplicacionesfrontend, backend

Bundle

Page 59: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

2.x

frontend, backend, oferta, categoría, empresa

Proyecto

jobeet

Aplicacionesfrontend, backend

Bundle

Page 60: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

2.x

Aplicación

Módulo

Plugin

Librerías

1.x

Bundle

Page 61: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

mi_proyecto/src/ autoload.php Application/ FrontendBundle/ Bundle/ vendor/

Page 62: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

mi_proyecto/src/Application/ FrontendBundle/ Controller/ Resources/

Page 63: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

mi_proyecto/src/Application/ FrontendBundle/ Controller/ DefaultController.php Resources/

Page 64: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

mi_proyecto/src/Application/ FrontendBundle/ Controller/ DefaultController.php Resources/ config/ views/

Page 65: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

mi_proyecto/src/Application/ FrontendBundle/ Controller/ DefaultController.php Resources/ config/ routing.yml views/ index.php

Page 66: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

twig

Page 67: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

PropelBundle/ Command/ DependencyInjection/ Logger/ Resources/ Tests/

Page 68: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

TwigBundle/ DependencyInjection/ Extension/ Loader/ Renderer/ Resources/ Tests/ TokenParsers/

Page 69: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Page 70: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

modular

xxxxxxxxxxxxx

completo

xxxxxx

Page 71: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Inyección de Dependencias

Page 72: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Inyección de Dependencias DIInversion of Control IoC

Page 73: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Inyección de Dependencias DI

Inversion of Control

Page 74: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

sfConfigsfProjectConfigurationsfAppConfiguration

sfContextconfig handlers...

1.x 2.x

DI

Page 75: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Problema

¿Cómo configuro un objeto mailer para enviar emails desde mis aplicaciones?

Page 76: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

public function emailAction(){ $mailer = $this->getMailer();

$mensaje = \Swift_Message::newInstance()

->setSubject('Asunto')

->setFrom('[email protected]')

->setTo('[email protected]')

->setBody('Cuerpo');

$mailer->send($mensaje);

...}

Page 77: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

class Mailer

{

function __construct() {

$this->setUsername('xxxxxxxx')

$this->setPassword('xxxxxxxx');

}

}

$mailer = $this->getMailer();

Page 78: Symfony 2 - decharlas 2010

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

Page 79: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

class Mailer

{

function __construct($user, $pass) {

$this->setUsername($user)

$this->setPassword($pass);

}

}

$mailer = $this->getMailer('xxxx', 'xxxx');

Page 80: Symfony 2 - decharlas 2010

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

Page 81: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

DIC

Page 82: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

DIC

ependencynjectionontainer

Page 83: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

DIC configuración flexible=

Page 84: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

public function emailAction(){ $mailer = $this->getMailer();

$mensaje = \Swift_Message::newInstance() ->setSubject('Asunto') ->...

frontend/config/config.ymlswift.mailer:

transport: gmail

username: xxxxxxxx

password: xxxxxxxx

src/FrontendBundle/Controller/DefaultController.php

Page 85: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

DIC! Objetos globales" Modelo" Tus clases

Page 86: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

El modelo

Page 87: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Page 88: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Page 89: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

DBAL

PDO

ORM

Page 90: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

ORM

ODM

Page 91: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Object Document Mapper

Page 92: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

NoSQL

Page 93: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

NoSQL

Page 94: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Page 95: Symfony 2 - decharlas 2010

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

Page 96: Symfony 2 - decharlas 2010

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

Page 97: Symfony 2 - decharlas 2010

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'

);

...

}

}

Page 98: Symfony 2 - decharlas 2010

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

...

}

}

Page 99: Symfony 2 - decharlas 2010

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

...

}

}

Page 100: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

La Vista

Page 101: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

1.x 2.x

slotlayoutpartial

plantillacomponent

component slot

plantillaslot

plantillaslot

plantillaplantilla

acción+

plantilla

acción+

Page 102: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

1.x 2.x

slotlayoutpartial

plantillacomponent

component slot

plantilla

slotplantilla slot+plantilla

plantilla acción+plantilla acción+

Page 103: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

modular

fácilxxxxxxxx

completo

xxxxxx

Page 104: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

<html>

<head>

<meta http-equiv="Content-Type"

content="text/html; charset=utf-8" />

</head>

<body>

<?php echo $sf_content ?>

</body>

</html>

1.x

Page 105: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

<html>

<head>

<meta http-equiv="Content-Type"

content="text/html; charset=utf-8" />

</head>

<body>

<?php $view->slots->output('_content') ?>

</body>

</html>

2.x

Page 106: Symfony 2 - decharlas 2010

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>

...

Page 107: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

$view->extend('FrontendBundle:Default:layout');

src/ Application/ FrontendBundle/ Resources/ views/ Default/ layout.php

Page 108: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

$view->extend('FrontendBundle::layout');

src/ Application/ FrontendBundle/ Resources/ views/ layout.php

Page 109: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

$view->extend('PlantillasBundle::layout');

src/ Bundle/ PlantillasBundle/ Resources/ views/ layout.php

Page 110: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

$view->extend(

'PlantillasBundle::layout_pagina'

);

$view->extend(

'PlantillasBundle::layout_pagina'

);

$view->extend(

'PlantillasBundle::layout_pagina'

);

Page 111: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

$view->extend(

'PlantillasBundle::layout_pagina'

);

$view->extend(

'PlantillasBundle::layout_seccion'

);

$view->extend(

'PlantillasBundle::layout_seccion'

);

Page 112: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

$view->extend(

'PlantillasBundle::layout_pagina'

);

$view->extend(

'PlantillasBundle::layout'

);

$view->extend(

'PlantillasBundle::layout'

);

Page 113: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

echo $view->render(

'SitioBundle::buscador'

)

...

echo $view->render(

'NoticiasBundle:Default:ultimaHora',

array('noticias' => $noticias)

)

Page 114: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

echo $view->actions->output(

'BolsaBundle:Cotizaciones:indices',

array('indice' => 'IBEX35')

)

...

echo $view->actions->output(

'ContenidosBundle:Noticias:ultimaHora'

)

Page 115: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

$view->extend(...)

$view->render(...)

$view->actions->output(...)

Page 116: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Helpers

Page 117: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Los helpers de Symfony2 son objetos

Page 118: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

<a href="<?php

echo $view->router->generate('portada')

?>">

Portada

</a>

Page 119: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

2.x

1.x

<?php include_stylesheets() ?>

<?php use_stylesheet('main.css') ?>

<?php echo $view->stylesheets ?>

<?php $view->stylesheets->add('main.css') ?>

Page 120: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

«We're trading line length for lower [code] complexity»

David HeinemeierRailsConf 2010

Page 121: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Plantillas avanzadas

Page 122: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

twig

Page 123: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

twig

PHP

<h1><?php echo $oferta['titulo'] ?></h1>

<h1>{{ oferta.titulo }}</h1>

Page 124: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

twig

PHP<a href="<?php

echo $view->router->generate('portada')

?>">

Volver a la portada

</a>

<a href="{% route 'portada' %}">

Volver a la portada

</a>

Page 125: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

twig

PHP<?php foreach ($ofertas as $id => $oferta): ?>

<h2><?php echo $oferta['titulo'] ?></h2>

<p><?php echo $oferta['descripcion'] ?></p>

...

<?php endforeach ?>

{% for oferta in ofertas %}

<h2>{{ oferta.titulo }}</h2>

<p>{{ oferta.descripcion }}</p>

...

{% endfor %}

Page 126: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

! Código conciso! Diseñadores! Ultra-rápido

twig

Page 127: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

El controlador

Page 128: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

1.x 2.xrouting.yml routing.ymlbundle bundle

bundle bundle

Page 129: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

2.x

1.x

homepage:

pattern: /

defaults: { _bundle: FoundationBundle ,

_controller: Default, _action: index }

apps/frontend/config/config.yml

frontend/config/config.yml

homepage:

url: /

param: { module: default, action: index }

Page 130: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

homepage:

pattern: /

defaults: { _controller:

FoundationBundle:Default:index }

homepage:

pattern: /

defaults: { _bundle: FoundationBundle ,

_controller: Default, _action: index }

Page 131: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

2.xfrontend/config/routing.yml

homepage:

pattern: /

defaults: { _controller:

FoundationBundle:Default:index }

frontend:

resource: FrontendBundle/Resources/

config/routing.yml

Page 132: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

public function ofertaAction($id)

{

...

}

oferta:

pattern: /ofertas/:id

...

Page 133: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

public function ofertaAction($seccion, $categoria)

{

...

}

oferta:

pattern: /ofertas/:seccion/:categoria

...

Page 134: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

2.x

1.x

public function indexAction()

{

return $this->render(

'FrontendBundle:Default:index',

array('ofertas' => $ofertas)

);

}

public function indexAction()

{

$this->ofertas = $ofertas;

}

*Se supone que la plantilla es indexSuccess.php

Page 135: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Formularios

Page 136: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Form ModelosfForm Controlador Modelo

2.x

1.x

Page 137: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

sfForm Controlador Modelo

Form Modelo

2.x

1.x

Page 138: Symfony 2 - decharlas 2010

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'));

Page 139: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

TextField

TextareaField

CheckboxField

ChoiceField

PasswordField

HiddenField

Page 140: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

$form->add(new RepeatedField(

new PasswordField('contrasena'))

));

Contraseña

Repite la contraseña

Page 141: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

$form->add(new CollectionField(

new TextField('telefonos'))

));

Teléfono 1

Teléfono 2

Teléfono 3

Page 142: Symfony 2 - decharlas 2010

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

Calle

Número Piso CP

Dirección

Page 143: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

TextField RepeatedField

TextareaField CollectionField

CheckboxField FieldGroup

ChoiceField

PasswordField

HiddenField

Page 144: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

TextField RepeatedField MoneyField

TextareaField CollectionField DateField

CheckboxField FieldGroup BirthdayField

ChoiceField NumberField TimeField

PasswordField IntegerField DateTimeField

HiddenField PercentField TimezoneField

i18n

i18n

i18n

i18n

i18n

i18n

i18n

i18n

i18n

Page 145: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Validación

Page 146: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Form

Modelo

Validador

1.x 2.x

sfForm

sfValidator

Controlador

Modelo

Page 147: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

1.x 2.x

Form

Modelo

Validador

FormValidadorsfForm

sfValidator

Controlador

Modelo

Page 148: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Application\FrontendBundle\Model\Cliente:

properties:

nombre:

- MinLength: 3

fecha_nacimiento:

- Date: ~

codigo_postal:

- MaxLength: 5

Page 149: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

class Cliente

{

public $nombre;

public $fecha_nacimiento;

public $codigo_postal;

}

Page 150: Symfony 2 - decharlas 2010

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;

}

Page 151: Symfony 2 - decharlas 2010

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

Page 152: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

$validador = $this->container->getService(

'validator'

);

$form = new Form(

'cliente',

$cliente,

$validador

);

Page 153: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Pruebas unitarias y funcionales

Page 154: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

PHPUnit 3.5

Page 155: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

src/ Application/ FrontendBundle/ Model/ Article.php Tests/ Model/ ArticleTest.php

Page 156: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

> phpunit -c frontend/

> phpunit -c frontend/ src/Application/

FrontendBundle/

Page 157: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

> phpunit -c frontend/

Page 158: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

> phpunit -c frontend/

Page 159: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Estándares

Page 160: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

1.x 2.x

sfCachesfLogger

sfValidatorautoload

lime

Zend_CacheZend_LoggerJava JSR 303PHP 5.3 autoloadPHPUnit

Page 161: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

modular

fácilestándar

completo

xxxxxx

Page 162: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Rendimiento

Page 163: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

100veces más rápido

que symfony 1

Page 164: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

100veces más rápido

que symfony 1

depende del tipo de benchmark

Page 165: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

3 x

6 x

3 x

4 x

Page 166: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

! Utiliza PHP 5.3.2

Page 167: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

20 %

Page 168: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

! Utiliza PHP 5.3.2! lazy-loading

Page 169: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

servicioslistenershelpers

autoloader

PHP 5.3 interoperability

standard

Page 170: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

! Utiliza PHP 5.3.2! lazy-loading! cache

Page 171: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

frontendDevDebugProjectContainer.metafrontendDevDebugProjectContainer.phpfrontendUrlGenerator.metafrontendUrlGenerator.phpfrontendUrlMatcher.metafrontendUrlMatcher.php__TwigTemplate_a242fa75a6db74398d3e6.php

cache/

Page 172: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

! Utiliza PHP 5.3.2! lazy-loading! cache! otros

Page 173: Symfony 2 - decharlas 2010

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]

Page 174: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

! Utiliza PHP 5.3.2! lazy-loading! cache! otros! acelerador web

Page 175: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Apache

Page 176: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

ApacheSquid

Page 177: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

ApacheSquid

Page 178: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Symfony2 incluye un acelerador web

creado con PHP

Page 179: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Apache Acelerador Aplicación

Page 180: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

El acelerador guarda en la cache páginas completas

Page 181: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

$respuesta->setExpires(...);

$respuesta->setMaxAge(...);

$respuesta->setTtl(...);

$respuesta->setLastModified(...);

Page 182: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

public function indexAction()

{

$respuesta = $this->render(

'FrontendBundle:Default:index',

array('ofertas' => $ofertas)

);

$respuesta->setMaxAge(60);

return $respuesta;

}

Page 183: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

El acelerador minimiza las veces que se

ejecuta la aplicación

Page 184: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Page 185: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

5 minutos1 minuto

5 minutos

1 minuto

180 minutos

180 minutos

5 minutos

Page 186: Symfony 2 - decharlas 2010

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" right next to the origin server.

ESI is primarily intended for processing on surrogates (intermediaries that operate on behalf of the 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 ESI is processed is addressed in the Edge Architecture Specification. Its capability token is ESI/1.0 ESI allows surrogates to treat parts of pages as cacheable resources, which gives them the ability to serve resources from cache in more situations.

IETF HTTP/1.1, part 6: CachingAbstract

The Hypertext Transfer Protocol (HTTP) is an application-level protocol for distributed, collaborative, hypermedia information systems. This document is Part 6 of the seven-part specification that defines the protocol referred to as "HTTP/1.1" and, taken 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.

Page 187: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

...

<?php $view->actions->render(

'BolsaBundle::cotizaciones'

) ?>

...

Page 188: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

...

<?php $view->actions->render(

'BolsaBundle::cotizaciones',

array('standalone' => true)

) ?>

...

Page 189: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

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

Page 190: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

! Utiliza PHP 5.3.2! lazy-loading! cache! otros! acelerador web

Page 191: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

100veces más rápido

que symfony 1

Page 192: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

EXCLUSIVO

EXCLUSIVOEXCLUSIVO

EXCLUSIVO

EXCLUSIVO

EXCLUSIVO

EXCLUSIVO

EXCLUSIVO

Page 193: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

modular

fácilestándar

completo

rápido

Page 194: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

50%menos memoria que

symfony 1

Page 195: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Y mucho más...

Page 196: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Symfony2 está siendo desarrollado en estos momentos!

Page 197: Symfony 2 - decharlas 2010

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

Page 198: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

primera versión alpha

septiembre

Page 199: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

lanzamiento previsto

finales 2010

Page 200: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

Muchas gracias

Page 201: Symfony 2 - decharlas 2010

Jornadas Symfony http://decharlas.uji.es/symfony

[email protected]