Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP
Transcript of Introducción a Silex. Aprendiendo a hacer las cosas bien en PHP
Introducción a SilexAprendiendo a hacer las cosas bien con PHP
Daniel Primo
@delineaswww.danielprimo.es
“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?
¿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
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 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● 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
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...
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.
$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)
Form: formularios (II)
Si ha sido enviado procesamos
Si es válido continuamos
Redireccionamos para acabar
El controlador devuelve la plantillacon el formulario pintado
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/
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