Migrez solutions PrestaShop 1.7 vers 8.0

Migrez solutions PrestaShop 1.7 vers 8.0

La version PrestaShop 8 est sortie. Si vous êtes développeur prestashop, créez des modules ou des thèmes, et vous avez des clients travaillant avec PrestaShop, c’est une excellente occasion de passer du temps avec cette version et de tester vos solutions.

Dans cet article, je vais me concentrer sur les choses qui pourraient affecter votre travail. Vous lirez ici les modifications qui ne sont pas rétrocompatibles et qui pourraient vous obliger à apporter des modifications au code de vos solutions.

Il est à noter que PrestaShop 8 est une nouvelle version majeure. Bien qu’il s’agisse d’une évolution plutôt que d’une révolution, vous trouverez plusieurs changements de code logiciel qui peuvent avoir un impact significatif sur certains d’entre vous.

Comme toujours, nous avons fait de notre mieux pour que toutes les informations importantes sur les modifications soient disponibles dans la documentation du développeur. Cet article est une introduction et une explication du contenu que vous y trouverez.

Version PHP 8.0 and 8.1

PrestaShop 8 prend en charge… PHP 8 et “8.1”. C’est l’un des éléments les plus importants de la mise à jour vers la version 8. Chaque nouvelle version de PHP apporte de meilleures performances et de nombreuses fonctionnalités qui faciliteront le travail des développeurs. Cela ne signifie pas que PrestaShop nécessitera PHP “8.1”, la version minimale compatible est PHP “7.2.5”, mais nous vous recommandons d’utiliser la dernière version PHP disponible lorsque cela est possible. La sécurité est une affaire sérieuse (toujours), et PHP 8.1 garantit la prise en charge des mises à jour de sécurité jusqu’en novembre 2024.

Nous vous recommandons de rendre vos solutions compatibles avec la même gamme de versions PHP avec lesquelles PrestaShop est compatible (c’est-à-dire 7.2 ~ 8.1). Pour cela, vous devez vous assurer de ne pas utiliser les fonctionnalités du langage introduites dans les versions de PHP plus récentes que PHP 7.2. En même temps, pour que votre code fonctionne avec PHP 8.1, vous devez vous assurer de prendre en compte toutes les fonctionnalités qui auraient pu être obsolètes ou supprimées dans PHP 8 et 8.1, et éviter de les utiliser. La liste des modifications rétrocompatibles et des nouvelles obsolescences est disponible sur le site Web de PHP :

Le code de PrestaShop a également modifié pour devenir compatible avec les deux versions de PHP. Vous pouvez trouver les détails des modifications dans ces Pull Requests :

Cela vous donner un aperçu de ce que vous pourriez être confronté.

L’un des changements qui peut avoir un impact direct sur de nombreuses solutions qui fonctionnent avec PrestaShop est le changement de classe Attribute, qui a été renommé ProductAttribute. Le mot Attribute est désormais réservé en PHP, d’où la nécessité de ce changement.

La mise à jour de PHP et Symfony a nécessité la mise à jour de certaines dépendances utilisées dans le projet. Vous pouvez trouver la liste des mises à jour ici : Liste des dépendances mises à jour.

Si votre solution utilise l’une des bibliothèques mises à jour. Vous devrez peut-être mettre à jour votre code pour être compatible . Consultez les sites Web des créateurs de bibliothèques pour plus de détails.

La bibliothèque Guzzle a été mise à jour de la version “5.3” à “7.4”. Cela à noter car de nombreuses bibliothèques utilisent Guzzle comme leur propre dépendance. Et cette bibliothèque se comporte désormais très différemment par rapport aux versions précédentes. Si vous utilisez une bibliothèque qui dépend de Guzzle 5.3, vous devrez peut-être la mettre à jour.

Vous pouvez trouver plus d’informations et un guide de mise à niveau dans le référentiel Guzzle : Guide de mise à niveau pour Guzzle.

La version de framework Symfony 4.4

PrestaShop 1.7 a été la révolution qui a amorcé la migration vers Symfony, d’abord avec la version 2.8 dans les versions précédentes, et la 3.4 depuis PrestaShop 1.7.4. PrestaShop 8 introduit Symfony “4.4”. Comme les principales versions de PrestaShop seront publiées à l’avenir. Attendez-vous également à des mises à jour du framework Symfony. Cela peut également affecter vos solutions.

Les modifications notables qui impactent directement les utilisateurs de PrestaShop sont disponibles ici : Modifications notables liées à la mise à jour de Symfony.

Si vous avez des modules basés sur Symfony et que vous avez remarqué des éléments nécessitant une clarification dans la documentation, veuillez l’ajouter ou nous le faire savoir.

Vous pouvez trouver tous les changements liés à l’adaptation de PrestaShop à Symfony 4.4 dans cette Pull Request : ​​Mise à niveau vers Symfony 4.4.

Eléments obsolètes et supprimés dans Prestashop 8

Il s’agit probablement de l’un des changements susceptibles d’avoir l’impact le plus important sur vos solutions.

De nombreuses classes et méthodes marquées comme “obsolètes” dans les versions précédentes ont été supprimées dans PrestaShop 8. Il s’agissait de méthodes que le noyau n’utilisait plus ou qu’il n’était plus logique de conserver, comme les wrappers autour des fonctions PHP disponibles nativement. Un exemple typique de ces fonctions are :

Tools::jsonEncode()

And

Tools::jsonDecode()

Dans ce cas, le changement est simple, Tools::jsonEncode() doit être remplacé par json_encode(), et Tools::jsonDecode() par json_decode(). Ces deux fonctions sont nativement disponibles en PHP.

Selon votre environnement de développement, vous avez peut-être déjà remarqué ces obsolescences, car de nombreux IDE comme PHPStorm ou VSCodehighlight appellent des méthodes et des classes obsolètes. Vous pouvez trouver une liste des méthodes, classes, propriétés, constantes, fichiers, services Symfony et autres supprimés sur cette page : Suppressions de code.

À partir de PrestaShop 8, vous devriez voir des avertissements de dépréciation sur les journaux et le front office de la boutique après avoir activé le mode développeur. Alternativement, vous pouvez configurer l’affichage des erreurs de dépréciation en définissant la directive error_reporting dans votre configuration PHP sur E_DEPRECATED.

Je vous encourage à lire cette liste, et si vous trouvez des éléments manquants, veuillez nous en informer.

Changements dans les méthodes et leur comportement

Les classes et les méthodes supprimées ne sont pas les seules modifications pouvant entraîner la nécessité d’ajuster vos solutions.

Plusieurs méthodes ont vu des changements dans leurs signatures, types de retour, types de paramètres, comportement interne, etc. La liste complète des changements peut vous donner une meilleure compréhension des changements que vous devrez appliquer pour mettre à jour vos produits. Ces modifications vous affecteront si vos solutions décorent ou remplacent les services ou classes par défaut, ou si vous appelez directement les classes et méthodes concernées. Nous nous attendons à ce que les solutions typiques nécessitent peu ou pas de changements du tout.

Changements dans le composant Hook

Avec la version 8, PrestaShop sera plus strict concernant la mise en place et l’utilisation des hooks dans vos modules. Vous devez être conscient de deux changements qui peuvent avoir un impact sur vos solutions.

Le premier changement concerne les enregistrements Hook que votre module n’utilise pas. Si PrestaShop détecte qu’un module s’enregistre pour un Hook mais n’implémente pas de méthode pour celui-ci. Une exception sera levée en mode debug. Ce message d’erreur est destiné à aider les développeurs à identifier les erreurs lors du développement du module et ne doit pas affecter les modules en production.

Si votre configuration PHP est configurée pour afficher les erreurs E_DEPRECATED. Vous pouvez également vous attendre à voir des messages d’obsolescence lors de l’utilisation d’alias de hook. Par exemple, lorsque vous enregistrez hookLeftColumn au lieu de son homologue correct, hookDisplayLeftColumn.

Sécurité Prestashop 8

Avec l’introduction de la nouvelle fonctionnalité de gestion des politiques de mot de passe dans PrestaShop 8, certaines solutions peuvent nécessiter une mise à jour. Par exemple, ceux qui génèrent des mots de passe pour les clients ou créent de faux utilisateurs à des fins d’intégration externe.

Portez une attention particulière aux définitions de champ des classes Client et Employé. Désormais, ces classes nécessitent des mots de passe fournis sous forme de hachage de force appropriée selon les paramètres du back-office.

Si vous avez un code similaire à celui-ci :

$customer = new Customer();
$customer->passwd = ‘SomeWeakPassword’;
//…
$customer->save();

Cela peut ne pas fonctionner dans cette version, car la validation du score du mot de passe peut échouer.

Puisque la méthode Validate::isPasswd() a été supprimée, voici une meilleure façon de gérer ce scénario :

use PrestaShop\PrestaShop\Adapter\ServiceLocator;
use PrestaShop\PrestaShop\Core\Crypto\Hashing;
$customer = new Customer();
$crypto = ServiceLocator::get(Hashing::class);
$customer->passwd = $crypto->hash(Tools::passwdGen(64));
//…
$customer->save();

Cet exemple provient du fichier de mise à jour du module psgdpr, qui a dû être mis à jour pour cette raison précise.

Pour en savoir plus, consultez la mise en œuvre de la nouvelle politique de mot de passe dans cette demande d’extraction : Implémenter une nouvelle politique de mot de passe basée sur zxcvbn.

Front office et thème classique

PrestaShop 8 n’inclut pas de nombreux changements importants dans le thème Classic. Vous pouvez voir une liste ici : Changement dans le thème classique.

Cependant, la nouvelle fonctionnalité de politique de mot de passe a également un impact sur la vitrine. Vous pouvez mettre un widget spécial sur le front-end qui mesure la force du mot de passe. Pour savoir comment cela a été implémenté sur le thème classique. Ajoutez une politique de mot de passe stricte.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Panier