Lorsque vous travaillez sur des projets WordPress avec PHP 8.x, vous pouvez rencontrer l'erreur suivante :
Erreur fatale : PHP_CodeSniffer\Exceptions\RuntimeException : trim() : la transmission de null au paramètre n°1 ($string) de type chaîne est obsolète dans /path/...
Cette erreur se produit en raison d'un avertissement de dépréciation dans PHP 8.x, où la transmission de null à la fonction trim() n'est plus autorisée. Plus précisément, ce problème survient dans le cadre d'un reniflage des normes de codage WordPress (WPCS), qui fait partie de la configuration de PHP_CodeSniffer. À la date d’écriture de ces lignes, même avec les dernières versions de PHP_CodeSniffer et WordPress Coding Standards, ce problème persiste.
PHP_CodeSniffer est un outil qui aide les développeurs à maintenir les normes de codage en vérifiant leur code PHP pour détecter toute violation des règles spécifiées. Les normes de codage WordPress (WPCS) fournissent un ensemble de directives pour écrire du code cohérent et propre dans les projets WordPress. L'erreur mentionnée ci-dessus indique généralement qu'un extrait de code n'adhère pas à ces normes en raison de changements dans le comportement de PHP.
Pour résoudre ce problème, nous pouvons modifier manuellement le fichier à l'origine du problème, localiser la ligne où trim() est appelé et mettre à jour le code pour garantir que les valeurs nulles sont correctement traitées lors de l'appel de trim().
Par exemple, dans le fichier vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php, localisez la ligne 280 et remplacez la ligne suivante :
// this $cl_prefixes = trim( PHPCSHelper::get_config_data( 'prefixes' ); // to this $cl_prefixes = is_null( PHPCSHelper::get_config_data( 'prefixes' ) ) ? '' : trim( PHPCSHelper::get_config_data( 'prefixes' ) );
Cependant, comme dans de nombreuses décisions en matière de développement de logiciels, ce n'est pas parce que vous pouvez le faire que vous devriez le faire.
Bien que l'approche précédente puisse corriger l'erreur, il est important de se rappeler que la modification des fichiers du fournisseur n'est pas une solution durable. Les modifications seront perdues à chaque fois que vous mettrez à jour vos dépendances via Composer.
Une meilleure approche consiste donc à créer un fichier de correctif.
Voici un guide étape par étape sur la façon de créer et d'appliquer un correctif pour le problème
Une solution plus robuste consiste à créer un fichier de correctif. Cette méthode vous permet d'appliquer automatiquement vos modifications à chaque fois que vous installez ou mettez à jour vos dépendances.
Un fichier de correctif est un fichier texte qui contient les différences entre deux versions d'un fichier : essentiellement un instantané « avant » et « après ».
Dans le répertoire de votre projet, créez un dossier pour contenir le fichier de correctif :
mkdir -p correctifs
Dans le dossier patches/, créez un nouveau fichier de correctif appelé fix-null-trim.patch. Vous pouvez le faire avec votre éditeur de texte :
toucher les patchs/fix-null-trim.patch
Ouvrez fix-null-trim.patch dans votre éditeur de texte et ajoutez le contenu suivant :
--- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php @@ -280,7 280,7 @@ // Original code with `trim()` // Update this line: - $cl_prefixes = trim( PHPCSHelper::get_config_data( 'prefixes' ) ); $cl_prefixes = is_null( PHPCSHelper::get_config_data( 'prefixes' ) ) ? '' : trim( PHPCSHelper::get_config_data( 'prefixes' ) ); --- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php @@ -194,7 194,7 @@ // Original code with `trim()` // Update this line: - $cl_text_domain = trim( PHPCSHelper::get_config_data( 'text_domain' ) ); $cl_text_domain = is_null(PHPCSHelper::get_config_data( 'text_domain' )) ? '' : trim( PHPCSHelper::get_config_data( 'text_domain' ) ); --- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php @@ -1144,7 1144,7 @@ // Original code with `trim()` // Update this line: - $cl_supported_version = trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) ); $cl_supported_version = is_null(PHPCSHelper::get_config_data( 'minimum_supported_wp_version' )) ? '' : trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) );
Ce correctif indique à Composer de remplacer la ligne problématique dans PrefixAllGlobalsSniff.php par une version plus sûre qui utilise l'opérateur de fusion nul (??) pour éviter de transmettre null à trim().
Ensuite, vous devez demander à Composer d'appliquer ce correctif automatiquement chaque fois que vous installez ou mettez à jour vos dépendances.
Ouvrez le fichier composer.json de votre projet. Ajoutez la configuration suivante dans la section "extra". Si la section "extra" n'existe pas déjà, vous devrez la créer.
json "extra": { "patches": { "wp-coding-standards/wpcs": { "Fix null trim() issue": "patches/fix-null-trim.patch" } } }
Cela indique à Composer d'appliquer le fichier fix-null-trim.patch au package wp-coding-standards/wpcs lorsqu'il installe ou met à jour les dépendances.
Pour appliquer des correctifs via Composer, vous avez besoin du plugin composer-patches. Exécutez la commande suivante pour installer :
le compositeur nécessite des cweagans/composer-patches
Maintenant, vous pouvez appliquer le correctif en exécutant la commande suivante :
installation du compositeur
Lors de l'installation, Composer appliquera le correctif du dossier patches/ au fichier PrefixAllGlobalsSniff.php.
En créant et en appliquant un fichier de correctif, vous vous assurez que vos correctifs persistent dans les mises à jour de Composer, en respectant les meilleures pratiques en matière de développement logiciel. Surveillez régulièrement les mises à jour de PHP_CodeSniffer et des normes de codage WordPress, car ces problèmes pourraient être résolus dans les versions futures. Cette approche proactive améliore non seulement la qualité du code, mais améliore également votre flux de travail de développement dans les environnements PHP 8.x.
J'ai partagé le fichier de correctif dans ce Gist. N'hésitez pas à l'utiliser comme référence pour implémenter des correctifs similaires dans vos projets !
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3