Mientras trabajas en proyectos de WordPress con PHP 8.x, puedes encontrar el siguiente error:
Error grave: PHP_CodeSniffer\Exceptions\RuntimeException no detectado: trim(): Pasar nulo al parámetro n.º 1 ($cadena) de tipo cadena está obsoleto en /ruta/...
Este error se produce debido a una advertencia de obsolescencia en PHP 8.x, donde ya no se permite pasar nulo a la función trim(). Específicamente, este problema surge dentro de un análisis de los estándares de codificación de WordPress (WPCS), parte de la configuración de PHP_CodeSniffer. A la fecha de redacción de este artículo, incluso con las últimas versiones de PHP_CodeSniffer y WordPress Coding Standards, este problema persiste.
PHP_CodeSniffer es una herramienta que ayuda a los desarrolladores a mantener los estándares de codificación al verificar su código PHP en busca de violaciones de reglas específicas. Los estándares de codificación de WordPress (WPCS) proporcionan un conjunto de pautas para escribir código limpio y coherente en proyectos de WordPress. El error mencionado anteriormente generalmente indica que un fragmento de código no cumple con estos estándares debido a cambios en el comportamiento de PHP.
Para solucionar este problema, podemos modificar manualmente el archivo que causa el problema, ubicar la línea donde se llama a trim() y actualizar el código para garantizar que los valores nulos se manejen correctamente al llamar a trim().
Por ejemplo, en el archivo vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php, busque la línea 280 y reemplace la siguiente línea:
// 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' ) );
Sin embargo, como ocurre con muchas decisiones en el desarrollo de software, sólo porque puedas hacer esto no significa que debas hacerlo.
Si bien el enfoque anterior puede corregir el error, es importante recordar que modificar los archivos del proveedor no es una solución sostenible. Los cambios se perderán cada vez que actualices tus dependencias a través de Composer.
Un mejor enfoque, entonces, es crear un archivo de parche.
Aquí hay una guía paso a paso sobre cómo crear y aplicar un parche para el problema
Una solución más sólida es crear un archivo de parche. Este método le permite aplicar sus cambios automáticamente cada vez que instala o actualiza sus dependencias.
Un archivo de parche es un archivo de texto que contiene las diferencias entre dos versiones de un archivo, esencialmente una instantánea del "antes" y el "después".
En el directorio de tu proyecto, crea una carpeta para contener el archivo del parche:
mkdir -p parches
Dentro de la carpeta patches/, cree un nuevo archivo de parche llamado fix-null-trim.patch. Puedes hacer esto con tu editor de texto:
tocar parches/fix-null-trim.patch
Abre fix-null-trim.patch en tu editor de texto y agrega el siguiente contenido:
--- 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' ) );
Este parche le dice a Composer que reemplace la línea problemática en PrefixAllGlobalsSniff.php con una versión más segura que usa el operador coalescente nulo (??) para evitar pasar nulo a trim().
A continuación, debes indicarle a Composer que aplique este parche automáticamente cada vez que instales o actualices tus dependencias.
Abre el archivo compositor.json de tu proyecto. Agregue la siguiente configuración en la sección "extra". Si la sección "extra" aún no existe, deberás crearla.
json "extra": { "patches": { "wp-coding-standards/wpcs": { "Fix null trim() issue": "patches/fix-null-trim.patch" } } }
Esto le indica a Composer que aplique el archivo fix-null-trim.patch al paquete wp-coding-standards/wpcs cuando instale o actualice dependencias.
Para aplicar parches a través de Composer, necesita el complemento Composer-patches. Ejecute el siguiente comando para instalar:
el compositor requiere cweagans/composer-patches
Ahora puedes aplicar el parche ejecutando el siguiente comando:
instalación del compositor
Durante la instalación, Composer aplicará el parche desde la carpeta patches/ al archivo PrefixAllGlobalsSniff.php.
Al crear y aplicar un archivo de parche, te aseguras de que tus correcciones persistan en las actualizaciones de Composer, adhiriéndose a las mejores prácticas en el desarrollo de software. Supervise periódicamente las actualizaciones de PHP_CodeSniffer y los estándares de codificación de WordPress, ya que estos problemas pueden resolverse en futuras versiones. Este enfoque proactivo no solo mejora la calidad del código sino que también mejora su flujo de trabajo de desarrollo en entornos PHP 8.x.
He compartido el archivo de parche en este Gist. ¡No dudes en utilizarlo como referencia para implementar correcciones similares en tus proyectos!
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3