Al distribuir Shopware Plugins como un archivo ZIP, debe incluir el directorio del vendor , pero sin las dependencias de shopware/core , shopware/administration , etc. definidas en composer.json . Ese me puse manos a la obra.
Pero, ¿cómo incluir dependencias, que a su vez tienen dependencias, que se superponen con las dependencias de shopware/core ?
Explícitamente, trato de agregar un paquete, que depende (como el propio Shopware) de psr psr/cache . Pero cuando lo incluyo, recibo el siguiente mensaje de error, al activar el complemento:
Fatal error: Cannot declare interface Psr\Cache\CacheItemPoolInterface, because the name is already in use in /var/www/html/vendor/psr/cache/src/CacheItemPoolInterface.php on line 14¿Hay algún flujo de trabajo conocido para resolver este tipo de problemas? La documentación que proporciona Shopware no explica cómo resolver este tipo de conflictos.
Si distribuye complementos para Shopware y usa bibliotecas de Composer, puede encontrar conflictos de alcance y espacio de nombres como Fatal error: Cannot declare interface... . El mismo problema se encuentra en WordPress , Joomla , PrestaShop o cualquier otro CMS donde no tienes un control completo de lo que está instalado.
Como describió, el problema inicial es un conflicto entre las bibliotecas principales y las dependencias de su complemento. Además, puede encontrar problemas entre cada paquete instalado en el sistema que copia los paquetes de Composer a Shopware usando las mismas bibliotecas o diferentes versiones de las mismas bibliotecas.
En la práctica, la única solución real y más flexible es anteponer el código PHP que incluye en el archivo ZIP. De esta manera, está completamente seguro de que funciona independientemente de lo que esté instalado junto a él.
En el ecosistema de PHP, existen algunas soluciones para prefijar espacios de nombres y personalizar el alcance del proyecto. Por ejemplo: php-scoper, namespacer, mozart o PHP-Prefixer.
Descargo de responsabilidad: soy el desarrollador principal de PHP-Prefixer.
Si es su complemento, entonces hay tres opciones.
Si no es suyo, debe crear un problema para el proveedor del complemento.