> For the complete documentation index, see [llms.txt](https://akyos.gitbook.io/book/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://akyos.gitbook.io/book/prestashop/architecture-legacy-vs-modern.md).

# Architecture Legacy VS Modern

:pushpin: Documentation : <https://devdocs.prestashop-project.org/9/development/architecture/>

### 1. Le **legacy**

Le **legacy** correspond à l’ancienne architecture historique de PrestaShop.

Elle repose principalement sur les anciens contrôleurs, les helpers (`HelperForm`, `HelperList`), les templates Smarty et une logique souvent très mélangée dans une même classe. La doc PrestaShop parle bien d’une architecture “Legacy” séparée de l’architecture “Modern”.

### 2. Le **modern**

Le **modern** correspond à la nouvelle architecture introduite progressivement avec **Symfony**.

L’objectif est de rendre le code plus propre, plus modulaire et plus simple à faire évoluer. Sur les pages modernisées, PrestaShop utilise notamment des **contrôleurs Symfony**, du **routing**, des **formulaires Symfony**, des templates **Twig** et une séparation plus nette entre l’interface et la logique métier.

### 3. Pourquoi il y a les deux en même temps ?

Parce que PrestaShop a été **migré progressivement**.

Toutes les pages n’ont pas été réécrites d’un coup : pendant longtemps, certaines pages sont restées en legacy tandis que d’autres ont été refaites en Symfony. La documentation officielle parle justement de ce processus de migration des pages du Back Office vers Symfony.

### 4. Pourquoi j'utilise toujours le legacy sur les modules simples ?

#### 1. Parce que c’est plus rapide et facile à mettre en place

Pour un petit module avec une page de configuration très basique, le legacy est plus rapide à développer.

Example : Un module avec un petit formulaire qui n'a q'un seul champ de configuration :&#x20;

* **Legacy :** Petite fonction displayForm dans la classe principale du module, et 5 lignes de plus dans la fonction getContent du même fichier pour gérer l'enregistrement.
* **Modern :** il faut les services, les routes, le controleur, le form type, le data provider, le form handler, ect ... Bien plus long à mettre en place.&#x20;

Donc, pour :

* un ou deux champs de configuration,
* une logique simple,
* une page admin sans besoin particulier,

J'utilise le legacy.

#### 2. Parce que cela reste compatible avec l’existant

PrestaShop continue de faire coexister legacy et modern pendant la transition. Les modules BO peuvent encore être soit **legacy**, soit **Symfony-based**.

Même sur Prestashop 9, les modules legacy restent compatibles, et cela va encore le rester sur PrestaShop 10. On verra pour Prestashop 11.
