---
title: actionDispatcher
section: hooks
slug: actionDispatcher
hook_type: action
category: system
location: FO+BO
since_version: 1.5
source_url: "https://ayudaprestashop.es/hooks/actionDispatcher"
---

# Hook `actionDispatcher`

| Propiedad | Valor |
| --- | --- |
| Tipo | Action |
| Localizacion | FO+BO |
| Categoria | system |
| Desde version | 1.5 |

## Descripcion

Se ejecuta al inicio del Dispatcher, antes de que se procese cualquier peticion HTTP. Permite interceptar, redirigir o modificar cualquier peticion entrante a la tienda. Es el hook mas temprano del ciclo de vida de una peticion PrestaShop — se ejecuta antes que cualquier controlador. Ideal para firewalls, geo-blocking, redirects globales, mantenimiento custom y logging de accesos.

## Parametros

| Nombre | Tipo | Requerido | Descripcion |
| --- | --- | --- | --- |
| `controller_type` | `int` | si | Tipo de controlador: 1=Front, 2=Back, 3=Module |
| `controller_class` | `string` | si | Nombre de la clase del controlador que se va a ejecutar |
| `is_module` | `bool` | no | Si el controlador pertenece a un modulo |

## Valor de retorno

- **Tipo**: `void`
- **Descripcion**: No se espera valor de retorno

## Disparado por

| Contexto | Clase | Metodo | Fichero |
| --- | --- | --- | --- |
| Dispatcher | `DispatcherCore` | `dispatch()` | `classes/Dispatcher.php` |

**Paginas**: `all-pages`

## Registro del hook

```php
public function install()
{
    return parent::install()
        && $this->registerHook('actionDispatcher');
}
```

## Ejemplo de uso

```php
/**
 * Hook actionDispatcher — Firewall basico + geo-blocking
 */
public function hookActionDispatcher($params)
{
    $controller = $params['controller_class'] ?? '';
    $type = (int)($params['controller_type'] ?? 0);

    // Solo aplicar en el front office (type=1)
    if ($type !== 1) {
        return;
    }

    // Obtener IP del visitante
    $ip = Tools::getRemoteAddr();

    // Comprobar si la IP esta bloqueada
    $blocked = Db::getInstance()->getValue(
        'SELECT COUNT(*) FROM `' . _DB_PREFIX_ . 'mymodule_blocked_ips`
         WHERE ip = \'' . pSQL($ip) . '\''
    );

    if ($blocked) {
        header('HTTP/1.1 403 Forbidden');
        die('Acceso denegado');
    }

    // Logging de accesos
    Db::getInstance()->insert('mymodule_access_log', [
        'ip'         => pSQL($ip),
        'controller' => pSQL($controller),
        'uri'        => pSQL(Tools::getCurrentUrlProtocolPrefix() . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']),
        'date_add'   => date('Y-m-d H:i:s'),
    ]);
}
```

## Notas y gotchas

- Este hook se ejecuta MUY temprano — el contexto puede no estar completamente inicializado.
- No uses $this->context->customer aqui — puede no existir aun. Usa Tools::getRemoteAddr() y cookies directamente.
- Se ejecuta en CADA peticion (front + back + API). Filtra siempre por controller_type para no bloquear el admin.
- Evita operaciones pesadas (queries a BD, APIs externas) — este hook impacta el tiempo de carga de TODA la tienda.
- Tambien existen actionDispatcherBefore (antes) y actionDispatcherAfter (despues) como alternativas.

## Hooks relacionados

- [`actionDispatcherBefore`](https://ayudaprestashop.es/hooks/actionDispatcherBefore)
- [`actionDispatcherAfter`](https://ayudaprestashop.es/hooks/actionDispatcherAfter)
- [`actionFrontControllerInitBefore`](https://ayudaprestashop.es/hooks/actionFrontControllerInitBefore)
- [`actionFrontControllerAfterInit`](https://ayudaprestashop.es/hooks/actionFrontControllerAfterInit)

## Guias relacionadas

- [security/token-csrf](https://ayudaprestashop.es/security/token-csrf)
- [front/frontcontroller](https://ayudaprestashop.es/front/frontcontroller)
- [modules/main-file](https://ayudaprestashop.es/modules/main-file)

## Historial de versiones

| Version | Cambio |
| --- | --- |
| 1.5 | Introducido como punto de interceptacion del Dispatcher |
| 1.6 | Añadidos actionDispatcherBefore y actionDispatcherAfter |


---

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