Silex (software)

Revisión del 09:31 21 jun 2020 de Rosarino (discusión | contribuciones)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Silex
Información sobre la plantilla
Parte de la familia Framework PHP
1024 2000.png
CreadorFabien Potencier, e Igor Wiedler.
DesarrolladorSensioLabs
Lanzamiento inicial16 September 2010.
Última versión estable1.3.3, 8 September 2015.
LicenciaMIT
Sitio web
http://silex.sensiolabs.org/

Silex es un microframework, escrito en PHP fácil de aprender, instalar y testear. Ha sido creado y se sigue manteniendo por los desarrolladores de Symfony. Silex Framework está muy extendido. Desciende directamente de Symfony y viene también de la mano de SensioLabs.


Definición e historia

Silex es un microframework para PHP. Está construido sobre la base de Symfony2 y inspirado por Sinatra de Ruby. Incorpora el patrón modelo vista controlador de una forma muy simple de usar, mediante su sencillo método de enrutamiento que aporta total flexibilidad en la forma de recibir peticiones.

Fue creado originalmente por Fabien Potencier, el creador del framework Symfony, e Igor Wiedler. Fue lanzado el 16 septiembre de 2010 como un framework web de prueba de concepto. Es uno de los microframework más conocidos para PHP y se coloca regularmente entre los más rápidos.


Características

Silex es un microframework:

  • Conciso: Proporciona una API concisa e intuitiva.
  • Extensible: Dispone de un sistema de extensiones basado en el micro contenedor de servicios Pimple y que facilita el uso de librerías creadas por terceros.
  • Fácil de testear: Utiliza el componente HttpKernel de Symfony para abstraer el manejo de la petición HTTP y de su respuesta. Esto facilita mucho la creación de tests tanto para las aplicaciones como para el propio framework. Además, Silex respeta la filosofía de funcionamiento de la especificación HTTP.
  • Su funcionamiento básico consiste en definir controladores y asociarlos con rutas, todo en un solo paso.
  • Usa multitud de componentes de Symfony2.

Además... El conjunto de funciones de base es un sistema de enrutamiento URL, construida en Seguridad Web, Sesiones y cookies de abstracción. La versión extendida de Silex cuenta con integración de la ramita, Doctrina, un servicio de traducción de la aplicación a diferentes idiomas, un mecanismo de registro utilizando la biblioteca Monolog para registrar las solicitudes y los errores, los servicios de validación de formularios y generación, y mucho más.


Instalación

Instalar Silex es tan sencillo como instalar cualquier paquete con Composer y Packagist. Lo único que hay que tener en cuenta es crear el (.htaccess), o el archivo o mecanismo necesario en el servidor web, que enrute todas las peticiones hacia un único archivo, el front-controller, donde nos espera Silex.


Middlewares

Los middlewares de Silex permiten ejecutar el propio código en diferentes fases del procesamiento de la petición del usuario de forma que se pueda modificar el comportamiento de Silex. Actualmente Silex define los dos siguientes middlewares:

  • Middlewares de aplicación, que se ejecutan con independencia de la petición que se está procesando actualmente.
  • Middlewares de enrutamiento, que se ejecutan solamente cuando Silex procesa la ruta para la que están asociados.


Servicios

Silex no solo es un microframework, sino que también es un micro contenedor de servicios. En realidad Silex hace uso del proyecto Pimple, que proporciona un contenedor de servicios muy sencillo.


Proveedores

Los proveedores te permiten reutilizar partes de una aplicación en otra aplicación. Silex incluye dos tipos de proveedores definidos por dos interfaces diferentes: ServiceProviderInterface para los servicios y ControllerProviderInterface para los controladores.


Tests

Silex está construido con las mismas piezas que el framework Symfony, por lo que es sencillo escribir tests funcionales para las aplicaciones. Los tests funcionales son pruebas que se ejecutan automáticamente y que garantizan que el código de la aplicación funcione tal y como se espera que haga. Estas pruebas acceden a la aplicación a través de un navegador simulado e imitan las mismas acciones que haría un usuario real.


Funcionamiento interno

  • La aplicación.

La aplicación es el elemento más importante de Silex. Se trata de una clase que implementa la interfaz HttpKernelInterface de Symfony, que permite pasarle un objeto de tipo Request al método handle() y devuelve un objeto de tipo Response. Esta clase también extiende el contenedor de servicios de Pimple, lo que le otorga una gran flexibilidad no solo hacia el exterior sino también internamente. Además de poder reemplazar cualquier servicio con tu propio código, puedes acceder a cualquier servicio de la aplicación.

La aplicación también utiliza mucho el componente EventDispatcher para manejar los eventos del component HttpKernel de Symfony. Entre otras muchas cosas, gracias a estos eventos se obtiene el objeto Request, se convierten las cadenas de texto en respuestas de tipo Response y se manejan las excepciones. Los eventos también permiten la definición de los eventos responsables de los middlewares after y before.

  • El controlador.

La clase Route de Symfony es la responsable del sistema de enrutamiento tan poderoso de Silex. Las rutas pueden tener nombres, lo que permite que luego puedan ser generadas fácilmente. Las rutas también pueden agregar requisitos para el valor de sus variables. Para facilitar su manejo, el método match() (que lo utilizan internamente los métodos get(), post(), etc.) devuelve una instancia de la clase Controller, que a su vez encapsula a una ruta.

  • La clase ControllerCollection.

Como la clase RouteCollection está disponible en la aplicación, los proveedores pueden modificar sus contenidos. El problema es que en realidad las rutas no conocen sus propios nombres, ya que el nombre solo tiene sentido en el contexto de la clase RouteCollection y no se puede cambiar. Para resolver este problema se ha creado una zona intermedia para las rutas. La clase ControllerCollection almacena los controladores hasta que se ejecuta el método flush(). En ese mismo momento, las rutas se añaden al RouteCollection y los controladores ya no se pueden modificar. Por tanto, si tratas de modificar un controlador después de este punto, Silex lanzará una excepción. Desafortunadamente no existe una forma de hacer el flush implícitamente, por lo que ahora siempre se realiza explícitamente. Si quieres acceder al objeto ControllerCollection antes de la petición, el flush debes realizarlo tu mismo. La clase Application incluye un atajo en forma del método flush().

  • Symfony

Silex utiliza los siguientes componentes de Symfony:

  • HttpFoundation: para las clases Request y Response.
  • HttpKernel: hace de núcleo del microframework.
  • Routing: proporciona el sistema de enrutamiento.
  • EventDispatcher: para utilizar eventos relacionados con el componente HttpKernel.


Silex y los servidores web

Silex puede ser instalado y configurado en algunos de los servidores web más populares, como Apache, ningx, Lighttpd e IIS.


Fuentes