---
title: Routing — URLs de modulos y rutas Symfony
section: modules
slug: routing
description: "Como configurar el routing en modulos PrestaShop 8/9: routes.yml para controllers Symfony del BO, hookModuleRoutes para URLs del FO y generacion de URLs con el Router JS."
keywords: prestashop routing rutas modulo routes.yml Symfony front hookModuleRoutes URL amigable PS8
last_updated: 2024-12-01
source_url: "https://ayudaprestashop.es/modules/routing"
---

# Routing — URLs de modulos y rutas Symfony

> Como configurar el routing en modulos PrestaShop 8/9: routes.yml para controllers Symfony del BO, hookModuleRoutes para URLs del FO y generacion de URLs con el Router JS.

PrestaShop usa dos sistemas de routing: **routes.yml** para las paginas del Back Office (Symfony) y **hookModuleRoutes** para las paginas del Front Office. Ambos permiten crear URLs amigables y parametrizadas.

## Rutas del Back Office (routes.yml)

*config/routes.yml — rutas de controllers Symfony en el BO*

```yaml
# Ruta basica
admin_mymodule_index:
    path: /my-module
    methods: [GET]
    defaults:
        _controller: 'MyModule\Controller\Admin\IndexController::indexAction'
        _legacy_classname: AdminMyModule
        _legacy_link: AdminMyModule

# Ruta con parametro
admin_mymodule_item_edit:
    path: /my-module/items/{id}/edit
    methods: [GET, POST]
    requirements:
        id: '\d+'
    defaults:
        _controller: 'MyModule\Controller\Admin\ItemController::editAction'

# Ruta de eliminacion
admin_mymodule_item_delete:
    path: /my-module/items/{id}
    methods: [DELETE]
    requirements:
        id: '\d+'
    defaults:
        _controller: 'MyModule\Controller\Admin\ItemController::deleteAction'
```

## Rutas del Front Office (hookModuleRoutes)

*hookModuleRoutes — URLs amigables en el Front Office*

```php
<?php

public function hookModuleRoutes(): array
{
    return [
        // ── Ruta de listado ──
        'module-mymodule-list' => [
            'controller' => 'list',
            'rule'       => 'mi-modulo/listado',
            'keywords'   => [],
            'params'     => ['fc' => 'module', 'module' => $this->name],
        ],

        // ── Ruta de detalle con slug ──
        'module-mymodule-detail' => [
            'controller' => 'detail',
            'rule'       => 'mi-modulo/{slug}',
            'keywords'   => [
                'slug' => ['regexp' => '[_a-zA-Z0-9-]+', 'param' => 'slug'],
            ],
            'params'     => ['fc' => 'module', 'module' => $this->name],
        ],

        // ── Ruta con ID numerico ──
        'module-mymodule-item' => [
            'controller' => 'item',
            'rule'       => 'mi-modulo/item/{id:[0-9]+}',
            'keywords'   => [
                'id' => ['regexp' => '[0-9]+', 'param' => 'id'],
            ],
            'params'     => ['fc' => 'module', 'module' => $this->name],
        ],
    ];
}
```

## Generar URLs desde PHP

*Generar URLs de rutas desde PHP*

```php
<?php

// ── FRONT OFFICE — usar Link ──
$link = Context::getContext()->link;

// URL de FrontController del modulo
$url = $link->getModuleLink('mymodule', 'list');
$url = $link->getModuleLink('mymodule', 'detail', ['slug' => 'mi-producto']);

// ── BACK OFFICE — usar el Router de Symfony ──
// Desde dentro de un Symfony Controller:
$url = $this->generateUrl('admin_mymodule_item_edit', ['id' => 42]);

// Desde el modulo (mymodule.php):
$container = \PrestaShop\PrestaShop\Adapter\SymfonyContainer::getInstance();
$router = $container->get('router');
$url = $router->generate('admin_mymodule_item_edit', ['id' => 42]);
```

## Generar URLs desde JavaScript

*Router JS en el Back Office de PrestaShop*

```javascript
// El router de Symfony esta disponible en el BO via window.prestashop.instance.router
// SOLO en el Back Office con los assets del BO cargados

const router = window.prestashop?.instance?.router;

if (router) {
    // Generar URL de una ruta del BO
    const editUrl = router.generate('admin_mymodule_item_edit', { id: 42 });
    console.log(editUrl); // /admin123/my-module/items/42/edit
} else {
    // Fallback para cuando el router no esta disponible
    console.warn('PS Router no disponible');
}
```


---

*Fuente: [https://ayudaprestashop.es/modules/routing](https://ayudaprestashop.es/modules/routing). Version Markdown generada automaticamente para consumo por LLMs.*
