introducción a silex. aprendiendo a hacer las cosas bien en php

63
Introducción a Silex Aprendiendo a hacer las cosas bien con PHP Daniel Primo @delineas www.danielprimo.es

Upload: delineas

Post on 26-Jul-2015

281 views

Category:

Internet


0 download

TRANSCRIPT

Introducción a SilexAprendiendo a hacer las cosas bien con PHP

Daniel Primo

@delineaswww.danielprimo.es

Vamos a aprender PHP

Vamos a aprender PHP

¿Quién soy?

Daniel Primo @delineas danielprimo.es

“Constructor freelance de mundo online”

No soy un experto.

Sólo os cuento mi experiencia.

¿Soy programdor?

Soy programador constructor

El día que todo cambió9 de Noviembre de 2012

“Exorcismo de codigo en PHP”

Charla de Agilecyl con Pepe Doval

Si no aspiras a mejorar en tu trabajo,¿por qué aspiras a cobrar por ello?

Soy programador

Y a medio camino...

¿Qué es el sílex?

El sílex (SiO2), se usó en la Edad de Piedra para la elaboración deherramientas cortantes, por su capacidad de romperse en lascas

(fractura concoidea, láminas rectas con ligeras curvas) de bordes muyagudos.

También fue usado para encender fuego por su capacidad de crearchispas al chocarse con otra pieza de igual o mayor dureza.

Generalmente se halla asociado con la caliza, rocas sedimentariasformadas por carbonato de calcio, depositadas en aguas profundas.

Típicamente se presenta en forma de nódulos entre estratos de caliza.

Fuente: Wikipedia

¿Qué es Silex?

Es un microframework de PHP. Construido ahombros de Symfony2 y Pimple e inspirado en

Sinatra (ruby).

http://silex.sensiolabs.org/

¿Y por qué es un microframework?

● Conciso: API fácil y divertida de manejar

● Extensible: A partir del micro service-containerPimple es sencillo incluir librerías de terceros

● Testable: Silex utiliza el componenteHttpKernel de Symfony2 lo que permiteabstraer petición y respuesta, lo que permitetestearlo con facilidad

Request Routing Controller Response

1 2 3 4

Request – Reponse

Hola Mundo!

En el navegadorlocalhost:8888/hello/chicken

Request

1

Genera una peticiónGET /hello/chicken

Captura la peticiónParámetro name reconocido

Routing

2

ControladorEjecuta la lógica (función anónima)

Controller

3

RespuestaSalida por pantalla

Response

4

Raíz de la web

Autocarga de clases

Creación de la aplicación

Ejecución de la aplicación

Herencia de variable:No es parámetro, es elcontenedor de todoPHP 5.3

Algunas cosas más

Instalación

www.getcomposer.org

Instalación básica

● Descargahttp://silex.sensiolabs.org/download

● Composer→ creamos fichero composer.json

composer install

Instalación “potencier”

● Descargahttps://github.com/silexphp/Silex-Skeleton

● Composercomposer create-project fabpot/silex-skeletonmyapp ~2.0@dev

● Código más ordenado● Librerías precargadas● Código de ejemplo

Skeleton

Skeleton● config: Aquí estará la configuración específica de cada entorno

(desarrollo, producción).

● var/logs: Ficheros de log.

● var/cache: Directorio donde se almacenará la caché de Twig y elProfiler

● src: Código de la aplicación.

– app.php → carga de providers

– controllers.php → definición de rutas/controladores

● templates: plantillas de Twig.

● vendor: librerías de terceros

● web: directorio accesible vía web, estarán los controladores frontalesy los assets.

– index.php → producción

– index_dev.php → desarrollo

Arrancamos el servidor

● Composer (definido en composer.json)composer run

● Servidor nativo de PHP 5.4php -S localhost:8888 -t web web/index_dev.phpphp -S localhost:8888 -t web web/index.php

● Servidor Apache configurado

¿Cuándo lo uso?

Lo bueno

● En pocos minutos tienes resultados● Es fácil hacerlo crecer● Ordenado, sino se hace muy grande● Toda la potencia de symfony● Se pueden ejecutar tests● Estructura flexible● Bien documentado

Lo malo

● Si crece mucho puedes caer en el caos● Pretender llegar al infinito (infinito = symfony)● No es igual de bueno para proyectos grandes● Errores por exceso de magia (o por

desconocimiento del truco)● Debes tener clara la estructura de tu código

Caso de estudio

● Primera página de reclamo● Segunda página con formulario● Formulario necesita validaciones específicas● Al enviar el formulario se envía un correo con

datos y se guarda en base de datos● Intregación con TPV Sermepa● Páginas estáticas de aviso legal, identidad...

Recordemos nuestra app

Modificadores de ruta

Proveedores (Providers)

Inyección de dependencias

La inyección de dependencias es un patrón dediseño en el que las dependencias se pasandirectamente a los servicios, en vez de crearlasdentro de los propios servicios o en vez de utilizarvariables globales.

Si se utiliza bien, la inyección de dependenciashace que el código resultante esté másdesacoplado, sea más flexible y fácil de testear y se pueda reutilizar más fácilmente.

Pimple

¡No solo eso!También es un contenedor de servicios

$app

● $app es un contenedor de servicios extensiónde Pimple

● Asignar un “closure” a una clave del array delcontenedor

● “share” indica que es compartido para toda laaplicación (puede usarse una y otra vez)

Twig: plantillas#app.php

#controllers.php

#hello.twig

Form: formularios (I)

Servicio de creación de forms

Request, para saber lo que enviamos

Form: formularios (II)

Si ha sido enviado procesamos

Si es válido continuamos

Redireccionamos para acabar

El controlador devuelve la plantillacon el formulario pintado

Form: formularios (III)

Form: formularios (IV)

Validaciones

Doctrine: base de datos

API

Y ya está...

Y más

● http_cache, integra el proxyinverso de Symfony2

● monolog, proporciona unsistema de logs

● security, se encarga degestionar la autenticación y laautorización de acceso

● serializer, proporciona unservicio para serializar objetos.

● validator, permite validarinformación

● session, almacenar informaciónde forma persistente entrediferentes peticiones.

● swiftmailer, permite enviaremails utilizando la librería SwiftMailer.

● translation, proporciona unservicio que facilita latraducción de tu aplicación adiferentes idiomas.

● url_generator, proporciona unservicio para poder generarURL a partir del nombre de laruta.

- ¿Perdona?- Si- ¿No dijiste que íbamos a hacer las cosas bien?- Si, ¿qué pasa?- Cuantas líneas tiene esa cosa todas juntas...- Ehhhh...

Ordena tu código

● Estructura en carpetas: views, form...● Estructura el enrutado / controlador

– Controladores en clases PHP normales

– Controladores como ControllerProviders

– Providers propios

● Otras ayudas– Configuración en ficheros YAML (rutas, opciones)

● http://librosweb.es/tutorial/como-organizar-bien-un-proyecto-silex/

Controladores en clases

Controladores en clases

ControllerProvider

Tests

● PHPUnit● WebTestCase para tests funcionales● Crawler como symfony :)● http://librosweb.es/libro/silex/capitulo_7.html

Nuestro provider

Protegido

Parámetro por defecto

Crea el servicio y lo registra

Configura la aplicación antes de la petición

Nuestro provider

Registro en la applicación

Show me the code

https://github.com/delineas/IntroSilex

Muchas Gracias

@delineas danielprimo.es

[email protected]