es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

RouteCollectionBuilder::setRequirement en Symfony 5.1+ es el equivalente de RoutingConfigurator.

Estoy actualizando de Symfony 4 a Symfony 5.4. Uno de los cambios en el paquete Framework Bundle es que se ha marcado como obsoleto el uso de RouteCollectionBuilder en favor de RoutingConfigurator. Pero el problema es que solía establecer requisitos predeterminados para las rutas de esta manera:

$routes->import($confDir . '/{routes}' . self::CONFIG_EXTS, '/', 'glob');
$routes->setRequirement('_locale', 'ru|en|ua|es|fr|pl|de|pt|it|be');

Pero el nuevo objeto RoutingConfigurator no tiene ningún método que reemplace a setRequirement. ¿Cómo puedo definir requisitos globales/predeterminados para todas las rutas con el nuevo configurador?

Otra cosa es que el argumento prefix también ha desaparecido, así que necesito encontrar una forma de utilizar un prefijo para todos los grupos de rutas (solía tener 3 grupos de rutas diferentes con prefijos diferentes).

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para establecer requisitos por defecto para todas las rutas utilizando RoutingConfigurator en Symfony 5.4, necesitas crear una función que tome el configurador de rutas como argumento y establezca los valores por defecto dentro de esa función:

    use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
    
    function configureRoutes(RoutingConfigurator $routes)
    {
        $routes->import($confDir . '/{routes}' . self::CONFIG_EXTS, '/', 'glob');
        $routes->addDefaults(['_locale' => 'ru|en|ua|es|fr|pl|de|pt|it|be']);
    }
    

    Luego, en tu archivo routes.yaml, puedes utilizar esta función de la siguiente manera:

    # config/routes.yaml
    home:
        path: /
        controller: App\Controller\HomeController::index
        # Llama a tu función configureRoutes aquí
        defaults: { _call: configureRoutes }
    

    Para utilizar prefijos para todo el grupo de rutas, puedes crear una nueva función que establezca el prefijo y luego importe las rutas dentro de ese prefijo de la siguiente manera:

    function configurePrefixedRoutes(RoutingConfigurator $routes, string $prefix, string $group)
    {
        $routes->prefix($prefix);
    
        $routes->import($confDir . "/$group/{routes}" . self::CONFIG_EXTS, '/', 'glob');
    }
    

    Y luego llama a esta función con el prefijo y grupo deseado en tu archivo routes.yaml de la siguiente manera:

    # config/routes.yaml
    # Rutas del Grupo 1 con prefijo "group1"
    group1:
        prefix: /group1
        # Llama a tu función configurePrefixedRoutes para el Grupo 1
        defaults: { _call: configurePrefixedRoutes, prefix: '/group1', group: 'group1' }
    
    # Rutas del Grupo 2 con prefijo "group2"
    group2:
        prefix: /group2
        # Llama a tu función configurePrefixedRoutes para el Grupo 2
        defaults: { _call: configurePrefixedRoutes, prefix: '/group2', group: 'group2' }
    
    # Rutas del Grupo 3 sin prefijo
    group3:
        # Llama a tu función configurePrefixedRoutes para el Grupo 3 sin prefijo
        defaults: { _call: configurePrefixedRoutes, prefix: '/', group: 'group3' }
    

    Con estos cambios, deberías poder actualizar de Symfony 4 a Symfony 5.4 y establecer requisitos por defecto y prefijos para tus rutas utilizando RoutingConfigurator.

Comments are closed.