silex: microframework y camino fácil de aprender symfony

Post on 15-Jan-2015

407 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Ya quieres aprender Symfony? Bueno! Si eres en usuario de Drupal o si quieres aumentar sus habilidades, aprender Symfony puede ayudarte. Sin embargo, aprender Symfony puede ser difícil - y muchas ideas nuevas (pero buenas) como PHP namespaces, Composer, y código "object-oriented". Te presento a Silex: el Microframework que se construye por las mismos pedazos (HttpFoundation, HttpKernel, Composer, etc) como el Symfony Framework y Drupal 8. En esta charla, vamos a crear un mini-app con Silex para mostrarte como fácil puede ser y cuales partes son los mismos como Symfony y Drupal. Al fin, vas a estar listo entender Drupal 8 o crear su primer proyecto con Symfony. Y porque esta charla sería mi primera en español, puedas disfrutar esta aventura conmigo :).

TRANSCRIPT

PHP Tutorial Screencasts

Silex

Microframework y camino fácil de aprender

Symfony

!

!

!

!

!!• Husband of the much more talented @leannapelham

PHP Tutorial Screencasts

knplabs.com github.com/weaverryan

• Lead contributor to the Symfony documentation !• KnpLabs US - Symfony consulting, training, Kumbaya !• Writer for KnpUniversity.com

screencasts

Buenos Dias!

PHP Tutorial Screencasts

knplabs.com github.com/weaverryan

• Viví en Querétaro en 2003 para cuatro meses

• Hablé casi 5 palabras en español.

• Este gringo estaba *sorprendido* por el costumbre de besar para saludar a las mujeres

Querétaro

Capítulo 1 !

La anatomía de cualquier web framework

@weaverryan

@weaverryan

Una aplicación compleja que nos

da saludos!

Configure Apache

O usen al web server nativo de PHP!

php -S localhost:8000

@weaverryan

*Se puede usar este web server para Drupal también

Request -> Response Framework

Request: GET /hello/drupalmx

Routing: determina una función que puede crear esta página (el controller)

El Controller: nuestro código: construye la pagina

Response: Hello drupalmx!@weaverryan

Una ruta que coincide cuando el URI es

/hello/*@weaverryan

Si el URI coincide la ruta, Silex ejecuta esta

función (el controller)

@weaverryan

El valor de {name} se pasa como argumento

al controller

@weaverryan

Construimos la pagina y celebrar!

@weaverryan

Request -> Response Framework

Request: GET /hello/drupalmx

Routing: determina una función que puede crear esta página (el controller)

El Controller: nuestro código: construye la pagina

Response: Hello drupalmx!@weaverryan

Capítulo 2 !

Request-Response

Nuestro Trabajo: Entender el “request” y

crear un “response”

@weaverryan

El Request

@weaverryan

GET /hello/drupalmx?page=5 HTTP/1.1!Host: localhost:8000!Connection: keep-alive!Cache-Control: max-age=0!Accept: text/html,application/xhtml+xml!User-Agent: Mozilla/5.0!Cookie: PHPSESSID=abcdefg; has_js=1;

El cliente nos da un mensaje sencillo que describe qué quiere

El Request

@weaverryan

GET /hello/drupalmx?page=5 HTTP/1.1!Host: localhost:8000!Connection: keep-alive!Cache-Control: max-age=0!Accept: text/html,application/xhtml+xml!User-Agent: Mozilla/5.0!Cookie: PHPSESSID=abcdefg; has_js=1;

El cliente nos da un mensaje sencillo que describe qué quiere

El método HTTP

El URI

El Request

@weaverryan

GET /hello/drupalmx?page=5 HTTP/1.1!Host: localhost:8000!Connection: keep-alive!Cache-Control: max-age=0!Accept: text/html,application/xhtml+xml!User-Agent: Mozilla/5.0!Cookie: PHPSESSID=abcdefg; has_js=1;

El cliente nos da un mensaje sencillo que describe qué quiere

Los Request headers

El Response

@weaverryan

HTTP/1.1 200 OK!Host: localhost:8000!Cache-Control: no-cache!Date: Wed, 23 Apr 2014 16:25:03 GMT!Content-Type: text/html;!!

Hello drupalmx

El Response

@weaverryan

El código del response

Los Response headersHTTP/1.1 200 OK!Host: localhost:8000!Cache-Control: no-cache!Date: Wed, 23 Apr 2014 16:25:03 GMT!Content-Type: text/html;!!

<h1>Hello drupalmx</h1>

El cuerpo

En PHP, el “request” mensaje se deconstruye

a los “superglobals”

@weaverryan

Para crear el response, usamos “header” y echo

content

@weaverryan

@weaverryan

El Request en Silex

@weaverryan

El Response en Silex

Capítulo 3 !

Namespaces & Autoloading

https://www.flickr.com/photos/chrisjeriko/8599248142

El controller puede ser cualquier función

Controller como método en clase

@weaverryan

Controller como método en clase

@weaverryan

PHP Namespaces

@weaverryan

Namespaces nos da nombres max largos nombre: Drupal\acme\Controller\DemoController

PHP Namespaces

@weaverryan

Autoloading

@weaverryan

No se necesita usar require/include si: !

A. El namespace es igualal directorio

!

B. La clase es igual alnombre de archivo (+.php)

Se llama PSR-0

Capítulo 4: !

Servicios y el “container”

Servicios: Objetos útiles

@weaverryan

El container: el objeto que contiene todos los servicios

@weaverryan

En Silex, Symfony y Drupal 8, existe un “container”.

!

Si lo tienes, puede usar los servicios (objetos útiles)

Podemos usar el servicio de Twig para render un template?

@weaverryan

El “container” in SilexEl servicio “twig”

Request -> Response Framework

Request: GET /hello/drupalmx

Routing: determina una función que puede crear esta página (el controller)

El Controller: nuestro código: construye la pagina

Response: Hello drupalmx!@weaverryan

Container (con servicios)

Capítulo 5: !

Eventos

https://www.flickr.com/photos/bmp_creep/8064779382

Como Drupal “hooks”, Silex tiene eventos

@weaverryan

Puede decir a Silex: “Por favor, cuando

ocurra el evento XXXXX, ejecute esa función”

@weaverryan

Request -> Response Framework

Request: GET /hello/drupalmx

Routing: determina una función que puede crear esta página (el controller)

El Controller: nuestro código: construye la pagina

Response: Hello drupalmx!@weaverryan

Container (con servicios)

Evento: kernel.request

Evento: kernel.controller

Eventos: kernel.view

kernel.response

@weaverryan

@weaverryan

Capítulo 6: !

El Profiler

https://www.flickr.com/photos/fukagawa/415772853

Silex (por Symfony) tiene un “profiler”

@weaverryan

@weaverryan

Contiene muchísimo información, incluyendo

el “timeline”

@weaverryan

@weaverryan

1) kernel.request evento

2) Routing

3) Ejecuta el controller

4) Nuestro “listener” en kernel.view

Capítulo 7: !

Todo lo mismo en Drupal 8

Cómo podemos crear esto en Drupal 8?

Gracias a mi amigo Jesus Olivas por ya tener blog

posts muy buenos

@jmolivas

jmolivas.com

http://bit.ly/d8-hello

1) Crear un module “acme”

@jmolivas http://bit.ly/d8-hello

2) Crear routing

@jmolivas http://bit.ly/d8-hello

Nombre del controller

3) Crear el controller

@jmolivas http://bit.ly/d8-hello

Module, Routing, Controller

@jmolivas http://bit.ly/d8-hello

@weaverryan

Tiene Drupal 8 un container con servicios?

@weaverryan

El Container

Donde se debe encuentra el container puede cambiar antes del fin de Drpual 8

@weaverryan

@weaverryan

Pero sí hay un container !

Y sí continue todos los objetos útiles (servicios) de

Drupal

Hay eventos como Silex?

@weaverryan

¡Sí! Existen los mismos eventos y más

1) Crear una clase “listener”

Se ejecuta al fin del request !

Añadimos JavaScript a cada pagina en el sitio

2) Añadir un nuevo servicio al container

@weaverryan

Ahora, el container tiene un servicio que se llama “acme.view_subscriber”

El event_subscriber tag dice al Drupal que este servicio quiere ser un “listener”

para algunos eventos

@weaverryan

Y existe el profiler?

@weaverryan

https://drupal.org/project/webprofiler

@weaverryan

https://drupal.org/project/webprofiler

@weaverryan

https://drupal.org/project/webprofiler

@weaverryan

https://drupal.org/project/webprofiler

@weaverryan

https://drupal.org/project/webprofiler

@weaverryan

https://drupal.org/project/webprofiler

Capítulo 8 !

!

, y

Temas Principales

• Request/Response !

• Routing/Controller !

• PHP Namespaces/Autoloading !

• Services/Container

• Events/Listeners

• Profiler

@weaverryan

Todos son iguales en Silex, Drupal y Symfony

Se puede usar Silex para aprender Drupal

Se puede usar Silex para aprender Symfony

Se puede usar Symfony para aprender Drupal

Al fin, tienen mas herramientas para cualquier problema

PHP Tutorial Screencasts

Ryan Weaver @weaverryan

¡Gracias!

@weaveryan @KnpUniversity

top related