Symfony2.3: Novedades – Components y Framework

Seguimos viendo las novedades de la versión 2.3 y vamos a ver lo que nos falta sobre los demás componentes, nuevos componentes y sobre el Framework. Como hay muchas novedades y gran parte de ellas están comentadas en el blog de Symfony, simplemente las nombraremos.

Nuevo Component: Debug

Se ha creado este nuevo componente a partir de ciertas clases del componente HttpKernel. Este componente nos provee de herramientas para debuggear más fácilmente las aplicaciones PHP.

Nuevo Component: Intl

Este componente es una capa de repuesto para la extensión intl en C.

Console

Eventos

Se han añadido los siguientes eventos:

  • ConsoleEvents::COMMAND Se lanza antes de que se ejecute el comando.
  • ConsoleEvents::TERMINATE Este evento te permite hacer tareas de limpieza una vez que el comando se ha ejecutado.
  • ConsoleEvents::EXCEPTION Este evento se lanzará cuando ocurre una excepción mientras se ejecuta un comando.

En la documentación se puede ver más información sobre estos eventos, casos típicos de uso, qué objeto recibimos en los listeners, etc. Para poder usar los eventos, tenemos que pasarle el EventDispatcher a la aplicación.

Table helper, multiselect, verbosity…

Al igual que pasó en la versión 2.2, se han introducido una gran cantidad de cambios en el componente Console.

Process

Este componente tiene las siguientes novedades:

 

DependencyInjection: Lazy Services

A partir de esta versión se pueden marcar servicios como lazy:

Con esto estamos indicando que se inicialice el servicio lo más tarde posible. Esto es útil cuando tenemos servicios que cuesta inicializarlos. Hay que tener en cuenta que hace falta el ProxyManager bridge para que funcione.

Framework

Permitir multiples IPs en la configuración del control de acceso

En esta versión se pueden añadir varias IPs para la misma regla en el control de acceso:

Antes había que indicar una regla para cada IP

Servicio serializer

Hasta ahora no existía el servicio serializer como tal, ahora podemos activarlo desde la configuración (por defecto está desactivado):

Monolog: Configurar canales adicionales sin tagged services

Con MonologBundle 2.4 se pueden configurar los canales directamente:

Por lo que no hace falta declararte tagged services para Monolog.

Synchronized services

En Symfony2 siempre ha habido problemas a la hora de crear servicios que dependen de la petición, esto se debe a los scopes en los servicios. A partir de la versión 2.3 se crea el concepto de servicios sincronizados y es la opción recomendada cuando trabajamos con servicios con scope request. Con los servicios sincronizados se usará la inyección por setter:

Ya sea cuando se entra o se sale del scope request, se llamará al método setRequest. En la documentación hay más información acerca de los servicios sincronizados.

Los servicios sincronizados introdujeron mucha lógica al container para poder manejarlos correctamente y la solución no acababa de gustar. Es por eso que en la versión 2.4 se introduce el nuevo RequestStack que será la forma recomendada de obtener la petición en un servicio y en la versión 3.0, request dejará de ser un servicio y se usará el RequestStack para acceder a la petición.

Bridge aplicaciones legacy con las sesión de Symfony2

Si estás integrando una aplicación antigua con Symfony2 Framework, el php bridge te permite integrar la sesión antigua de PHP con la de Symfony2.

http_method_override

Con este parámetro indicamos si el parámetro _method de una petición se usa como método HTTP en las peticiones POST.

profiler.collect

Este parámetro sirve para indicar sí el profiler coge datos de todas las peticiones.

trusted_proxies con notación CIDR

Ahora es posible configurar el parámetro trusted_proxies de la siguiente forma (indicando subredes):

PropertyAccess

El punto de entrada del componente se hace a través del método createPropertyAccesor de la clase PropertyAccess:

Además en esta versión también podemos usar el método __call, pero se debe hacer explícitamente.

Más novedades

DomCrawler: las Closures de los métodos each y reduce reciben como primer parámetro un Crawler

Finder:  Se ha añadido el método ignoreUnreadableDirs

Esto permite ignorar los directorios que no se tienen permisos de lectura.

Filesystem: Se ha añadido el método dumpFile

Permite enviar contenido a un fichero de forma atómica:  $fs->dumpFile('file.txt', 'Hello World');

Testing: Añadidos métodos getInternalRequest y getInternalResponse a Client

Con estos métodos se obtiene la petición del BrowserKit:

Serializer: Añadidos los métodos setIgnoredAttributes y setCamelizedAttributes en GetSetMethodNormalizer

Estos métodos nos permiten por una ignorar atributos del objeto original cuando se va a serializar (setIgnoredAttributes) e indicar qué atributos se deben pasar a formato Camel a la hora de llamar a los getters y setters (setCamelizedAttributes).

Doctrine: base mapping compiler pass

En esta versión de añade el compiler por defecto.

Y hasta aquí las novedades de la versión 2.3. En el blog de Symfony se pueden encontrar estas novedades. Próximamente veremos qué novedades podemos encontrar en la versión 2.4.

Para terminar y completar todo esto mejor, podéis ver la presentación de Javier López en deSymfony 2013 sobre novedades de la versión 2.3.