Buy Access to Course
04.

Adiós a SensioFrameworkExtraBundle

|

Share this awesome video!

|

Keep on Learning!

With a Subscription, click any sentence in the script to jump to that part of the video!

Login Subscribe

Nuestra aplicación se ha estropeado: algo sobre SensioFrameworkExtraBundle. Esto ocurrió mientras actualizábamos las recetas. En framework.yaml, es el annotations: false.

33 lines | config/packages/framework.yaml
// ... line 1
framework:
// ... lines 3 - 4
annotations: false
// ... lines 6 - 33

SensioFrameworkExtraBundle nos proporcionó todo tipo de funciones, como la anotación @Route, la anotación de seguridad y algo llamado convertidor de parámetros. Todas ellas dependían del sistema de anotaciones, que ha sido sustituido por atributos centrales de PHP. Cuando las cambiamos a false... al bundle no le gustó.

Pero bueno, ¡no pasa nada! Todas esas ingeniosas funciones encontraron un nuevo hogar en el núcleo de Symfony. Así que es hora de despedirnos con cariño de SensioFrameworkExtraBundle.

Desinstalarlo

Ejecuta: en tu terminal:

composer remove sensio/framework-extra-bundle

Hasta siempre, y gracias por todas las anotaciones. Cuando termina... y refrescamos, ¡el sitio vuelve a funcionar!

Comprobación de las características de SensioFrameworkExtraBundle

Pero... ¿utilizábamos alguna de sus funciones? No lo sé Una forma fácil de comprobarlo es ejecutándolo:

git grep FrameworkExtra

¡No! No parece que estemos haciendo referencia directa a ninguna sentencia use. Si es así, sólo es cuestión de averiguar qué nuevo atributo de Symfony sustituye a esa característica.

Para ayudarte, Symfony tiene una gran página de documentación llamada Symfony Attributes Overview. Muestra todos los atributos PHP de Symfony. Por ejemplo, SensioFrameworkExtraBundle tenía una anotación Security. Ahora Symfony tiene un atributo IsGrantedque puedes utilizar en su lugar.

Así que si estás utilizando algo del sistema antiguo, busca la nueva forma y actualízate.

El nuevo "Convertidor de parámetros

Aunque... hay una función de SensioFrameworkExtraBundle que no requería una anotación... así que puede que la hayas estado utilizando sin darte cuenta. Haz clic en una de las mezclas. Fíjate en que la URL tiene un slug. El controlador para esto essrc/Controller/MixController.php. Aquí abajo, la ruta tiene un comodín {slug}... pero luego un argumento $mix, que es una entidad Doctrine.

62 lines | src/Controller/MixController.php
// ... lines 1 - 12
class MixController extends AbstractController
{
// ... lines 15 - 35
#[Route('/mix/{slug}', name: 'app_mix_show')]
public function show(VinylMix $mix): Response
{
// ... lines 39 - 41
}
// ... lines 43 - 60
}

Entre bastidores, el convertidor de parámetros buscaría automáticamente unVinylMix en el que slug fuera igual a {slug} en la URL. No hacía falta ninguna anotación: simplemente funcionaba.

La buena noticia es que, como puedes ver, ¡esta magia sigue funcionando! La función vive ahora en el núcleo. Y en la mayoría de los casos, seguirá haciendo lo suyo silenciosamente, como antes.

Si añades una letra más al final del slug para obtener un 404, vemos que el sistema que hay detrás de esto es EntityValueResolver. Si necesitas algún control extra, puedes configurarlo con el atributo #[MapEntity].

Siguiente paso: ¡Quiero actualizar a Symfony 7! Pero para hacerlo, necesitamos eliminar todas estas deprecaciones.