---
title: Form Data Providers — modificar datos del formulario de producto
section: trucos
slug: form-data-providers
description: Como usar actionProductFormDataProviderData y actionProductFormDataProviderDefaultData para modificar datos antes de mostrar formularios Symfony en PrestaShop 8/9.
keywords: prestashop form data provider hook producto formulario modulo PS8 PS9 actionProductFormDataProviderData
last_updated: 2024-12-01
source_url: "https://ayudaprestashop.es/trucos/form-data-providers"
---

# Form Data Providers — modificar datos del formulario de producto

> Como usar actionProductFormDataProviderData y actionProductFormDataProviderDefaultData para modificar datos antes de mostrar formularios Symfony en PrestaShop 8/9.

Los hooks `action*FormDataProviderData` permiten modificar los datos que se cargan en los formularios Symfony del Back Office **antes de que se muestren** al usuario. Es la alternativa moderna y no destructiva a los overrides de clases PHP para alterar formularios existentes.

## Como funciona el ciclo de datos

| Momento | Hook | Uso |
| --- | --- | --- |
| Carga de producto existente | actionProductFormDataProviderData | Modifica datos antes de mostrar el form de edicion |
| Producto nuevo (defaults) | actionProductFormDataProviderDefaultData | Establece valores iniciales para un producto en blanco |
| Carga de combinacion | actionCombinationFormDataProviderData | Igual pero para el form de combinaciones |
| Carga de categoria | actionCategoryFormDataProviderData | Igual pero para el form de categorias (PS 8.1+) |

## Modificar datos de producto existente

*Modificar datos antes de mostrar el formulario de producto*

```php
<?php

public function install(): bool
{
    return parent::install()
        && $this->registerHook('actionProductFormDataProviderData')
        && $this->registerHook('actionProductFormDataProviderDefaultData');
}

/**
 * Se llama cuando se carga un producto existente para editar.
 * $params['id']   -> int ID del producto
 * $params['data'] -> array mutable con todos los datos del form
 */
public function hookActionProductFormDataProviderData(array $params): void
{
    $productId = (int) $params['id'];

    // Leer dato propio de la tabla del modulo
    $extra = Db::getInstance()->getValue(
        'SELECT extra_note FROM `' . _DB_PREFIX_ . 'mymodule_product`
         WHERE id_product = ' . $productId
    );

    if ($extra !== false) {
        // Modificar el campo 'mpn' dentro del tab 'details > references'
        // OJO: debes conocer el path exacto de la estructura de datos
        $params['data']['details']['references']['mpn'] = (string) $extra;
    }

    // Ejemplo: inyectar datos en una seccion custom
    // (requiere hookActionProductFormBuilderModifier para registrar el campo)
    $params['data']['mymodule_tab']['extra_field'] = $extra ?: '';
}
```

## Modificar datos por defecto (producto nuevo)

*Establecer valores por defecto cuando se crea un producto nuevo*

```php
<?php

/**
 * Se llama al crear un producto nuevo (campos en blanco).
 * Util para pre-rellenar campos con valores inteligentes.
 */
public function hookActionProductFormDataProviderDefaultData(array $params): void
{
    // Pre-rellenar MPN con prefijo de la empresa
    $params['data']['details']['references']['mpn'] = 'MY-PREFIX-';

    // Pre-activar producto para usuarios avanzados
    // $params['data']['header']['active'] = true;

    // Establecer impuesto por defecto del modulo
    // $idTaxRules = (int) Configuration::get('MY_MODULE_DEFAULT_TAX');
    // if ($idTaxRules > 0) {
    //     $params['data']['pricing']['id_tax_rules_group'] = $idTaxRules;
    // }
}
```

## Localizar el path del campo

Para saber el path exacto de un campo, usa `var_dump($params['data'])` en desarrollo o consulta las clases `ProductFormDataProvider` del core de PrestaShop. La estructura sigue la jerarquia de Form Types.

*Paths comunes del formulario de producto PS 8*

```php
<?php

// Estructura principal del array $params['data']:
// header.name              -> nombre del producto (multilingual)
// header.active            -> bool activo/inactivo
// header.id_category_default -> categoria principal
// description.description  -> descripcion larga
// description.description_short -> descripcion corta
// details.references.reference -> referencia
// details.references.mpn   -> MPN
// details.references.isbn  -> ISBN
// details.references.ean13 -> EAN13
// pricing.price            -> precio
// pricing.id_tax_rules_group -> grupo de impuestos
// pricing.wholesale_price  -> precio de coste
// stock.quantity           -> stock
// stock.minimal_quantity   -> cantidad minima de compra
// seo.meta_title           -> meta title (multilingual)
// seo.meta_description     -> meta description
// seo.link_rewrite         -> URL amigable (multilingual)
// shipping.width / height / depth / weight
// combinations.*           -> datos de combinaciones
```

## Ventajas sobre Overrides

| Aspecto | Override de clase | Data Provider Hook |
| --- | --- | --- |
| Compatibilidad entre modulos | Conflictos frecuentes | Composable: varios modulos coexisten |
| Actualizaciones de PS | Puede romperse | Estable entre versiones menores |
| Estructura de datos DB | Requiere override del ObjectModel | Solo modifica el array del form |
| Efecto | Permanente y global | Solo en el contexto del formulario |
| Debug | Dificil de rastrear | Claramente localizado en el hook |

> **[!] Performance: evita queries pesadas**
>
> Estos hooks se ejecutan cada vez que se carga el formulario. Usa Cache o queries simples (SELECT con indice) para no penalizar la velocidad del back office.


---

*Fuente: [https://ayudaprestashop.es/trucos/form-data-providers](https://ayudaprestashop.es/trucos/form-data-providers). Version Markdown generada automaticamente para consumo por LLMs.*
