💻 DéveloppementIntermédiaire PS 1.6 PS 1.7 PS 8.x

Ajouter un champ personnalisé au formulaire d'inscription PrestaShop

Guide complet pour ajouter un champ personnalisé (ex : case majeur) au formulaire de création de compte PrestaShop avec validation et message d'erreur custom.

En bref : Pour ajouter un champ personnalisé (comme une case 'majeur') au formulaire d'inscription PrestaShop, il faut modifier la base de données, déclarer le champ dans l'objet Customer, override le contrôleur AuthController pour la validation et le message d'erreur, puis ajouter le HTML dans le template — sur PrestaShop 8.x, privilégiez un module avec les hooks Symfony plutôt qu'un override.

Publié le 21 mars 2026 5 min de lecture Alexandre Carette

Pourquoi ajouter un champ personnalisé à l'inscription ?

Certaines obligations légales ou métier imposent de collecter des informations supplémentaires lors de la création de compte. L'exemple classique : une case à cocher confirmant que l'utilisateur est majeur, un numéro SIRET pour une boutique B2B, ou encore un code parrainage.

PrestaShop ne propose pas cette fonctionnalité nativement. Il faut intervenir sur trois niveaux : la base de données, le contrôleur d'authentification et le template du formulaire. Voyons comment procéder proprement sans toucher au cœur de PrestaShop.

Étape 1 : Ajouter la colonne en base de données

Avant toute chose, la table ps_customer doit pouvoir stocker la nouvelle donnée. Exécutez cette requête SQL via phpMyAdmin ou en ligne de commande :


ALTER TABLE `ps_customer`
ADD COLUMN `majeur` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0
AFTER `newsletter`;

Pour une installation propre, cette requête devrait se trouver dans le fichier install.sql de votre module ou dans la méthode install() si vous créez un module dédié.

Étape 2 : Déclarer le champ dans l'objet Customer

PrestaShop utilise son ORM interne (la classe ObjectModel) pour mapper les colonnes SQL aux propriétés PHP. Sans cette déclaration, l'objet Customer ignorera purement et simplement votre nouveau champ.

Créez un override de la classe Customer :


// override/classes/Customer.php
class Customer extends CustomerCore
{
    /** @var bool Confirmation de majorité */
    public $majeur;

    public function __construct($id = null)
    {
        // Déclarer le champ dans la définition ObjectModel
        self::$definition['fields']['majeur'] = [
            'type' => self::TYPE_BOOL,
            'validate' => 'isBool',
        ];
        parent::__construct($id);
    }
}

Point critique : sans cette déclaration, même si vous assignez $customer->majeur = 1 dans le contrôleur, la valeur ne sera jamais persistée en base. L'ORM de PrestaShop ne sauvegarde que les champs déclarés dans $definition['fields'].

Étape 3 : Override du contrôleur AuthController

C'est ici que la magie opère. Le formulaire d'inscription est traité par la méthode processSubmitAccount() du contrôleur AuthController. Le flux est le suivant :

  1. `postProcess()` détecte le submit via `Tools::isSubmit('submitAccount')`
  2. Il appelle `processSubmitAccount()`
  3. Cette méthode crée l'objet `Customer`, assigne les valeurs et appelle `$customer->add()`
  4. Voici l'override nécessaire :

    
    // override/controllers/front/AuthController.php
    class AuthController extends AuthControllerCore
    {
        protected function processSubmitAccount()
        {
            // Récupérer la valeur du champ personnalisé
            $majeur = (int) Tools::getValue('majeur');
    
            // Validation personnalisée AVANT la création du compte
            if (!$majeur) {
                $this->errors[] = $this->trans(
                    'Vous devez confirmer être majeur pour créer un compte.',
                    [],
                    'Shop.Notifications.Error'
                );
                return;
            }
    
            // Appeler le traitement parent
            parent::processSubmitAccount();
    
            // Assigner le champ à l'objet Customer après sa création
            if ($this->context->customer->id && empty($this->errors)) {
                $this->context->customer->majeur = $majeur;
                $this->context->customer->update();
            }
        }
    }
    

    Approche alternative (plus propre) avec un hook

    Sur PrestaShop 1.7+ et 8.x, vous pouvez utiliser le hook actionBeforeSubmitAccount sans override :

    
    // Dans votre module
    public function hookActionBeforeSubmitAccount($params)
    {
        $majeur = (int) Tools::getValue('majeur');
        if (!$majeur) {
            $controller = Context::getContext()->controller;
            $controller->errors[] = $this->l(
                'Vous devez confirmer être majeur pour créer un compte.'
            );
        }
    }
    

    Cette approche est préférable car elle évite les overrides qui compliquent les mises à jour.

    Étape 4 : Modifier le template du formulaire

    PrestaShop 1.6 (Smarty)

    Dans votre thème, éditez themes/votre-theme/authentication.tpl :

    
    <div class="form-group">
        <label for="majeur">
            <input type="checkbox" name="majeur" id="majeur" value="1"
                   {if isset($smarty.post.majeur) && $smarty.post.majeur}checked{/if} />
            Je certifie être âgé(e) de 18 ans ou plus *
        </label>
    </div>
    

    PrestaShop 8.x (Twig / module de formulaire)

    Sur PrestaShop 8.x, le système de formulaire client utilise Symfony. La méthode recommandée passe par un module qui étend le CustomerFormBuilder :

    
    // src/Form/Extension/CustomerFormExtension.php
    use PrestaShop\PrestaShop\Core\Form\FormHandlerInterface;
    use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
    
    class CustomerFormExtension
    {
        public function extend($formBuilder)
        {
            $formBuilder->add('majeur', CheckboxType::class, [
                'label' => 'Je certifie être majeur(e)',
                'required' => true,
            ]);
        }
    }
    

    Étape 5 : Personnaliser le message d'erreur

    Pour personnaliser les messages d'erreur affichés au client, plusieurs approches :

    Via les traductions PrestaShop

    Rendez-vous dans Localisation > Traductions > Modifier les traductions et sélectionnez le type "Traductions des messages d'erreur de la boutique". Recherchez votre message et modifiez-le.

    Directement dans le code

    Dans votre override ou module, utilisez le système de traduction :

    
    // PrestaShop 1.6
    $this->errors[] = Tools::displayError('Vous devez confirmer être majeur.');
    
    // PrestaShop 1.7+
    $this->errors[] = $this->trans(
        'Vous devez confirmer être majeur pour créer un compte.',
        [],
        'Shop.Notifications.Error'
    );
    

    Bonnes pratiques et pièges courants

    Erreur n°1 : Le champ n'est pas sauvegardé

    C'est le piège le plus fréquent. Si vous ajoutez la colonne SQL et récupérez la valeur avec Tools::getValue() mais que vous oubliez :

    • soit la déclaration dans `$definition['fields']` de l'objet Customer,
    • soit l'assignation `$customer->majeur = $majeur` dans le contrôleur,

    la colonne restera à sa valeur par défaut. Les deux étapes sont indispensables.

    Erreur n°2 : Override non détecté

    Après avoir créé vos fichiers d'override, n'oubliez pas de vider le cache de PrestaShop. En développement :

    
    # Supprimer le cache des classes
    rm -rf var/cache/prod/class_index.php
    rm -rf var/cache/dev/class_index.php
    
    # Ou en PrestaShop 1.6
    rm -rf cache/class_index.php
    

    Erreur n°3 : Validation côté serveur absente

    Ne vous fiez jamais à la validation JavaScript seule. Un utilisateur peut désactiver JavaScript ou manipuler la requête HTTP. Validez toujours côté serveur dans le contrôleur.

    Récapitulatif technique

    ÉtapeFichierAction 1SQL`ALTER TABLE ps_customer ADD COLUMN majeur` 2`override/classes/Customer.php`Déclarer le champ dans `$definition` 3`override/controllers/front/AuthController.php`Récupérer, valider et assigner la valeur 4Template du thèmeAjouter l'input HTML 5CacheVider `class_index.php`

    En respectant cette séquence, vous obtiendrez un champ personnalisé fonctionnel, validé côté serveur, avec un message d'erreur adapté à votre contexte métier.

#formulaire inscription #override controller #champ personnalisé #AuthController #validation client

Questions fréquentes

Tout ce que vous devez savoir sur ce sujet.

Un projet PrestaShop ?

Discutons-en directement.

★★★★★

193 projets livrés

Gratuit & sans engagement — réponse sous 24h

Alexandre Carette

Alexandre Carette

Expert PrestaShop & Architecture E-commerce

Développeur PrestaShop depuis 2014, 193 projets livrés. Je conçois des architectures headless Nuxt + PrestaShop et des outils d'automatisation IA pour les e-commerçants.