Plugin KO Classe ou fonction non trouvée

Bonsoir,

Du nouveau concernant mon soucis, et la solution (enfin, plutot le pourquoi, et le « fix ») :smiley:

Le plugin à besoin des librairies php monolog/monolog ET guzzlehttp/guzzle hors comme dit plus haut celle-ci ont été (seront) purement et simplement retirées du core de Jeedom presque sans vergogne :

:arrow_right: pour moi a elle seule cette modification nécessite un taggage de la prochaine version en v5 tant les effets de bord sont potentiellement importants … :neutral_face:

// OFF TOPIC : J’ai du mal a comprendre comment / pourquoi une application qui part nature log énormément et fait des requêtes peut faire le choix de se passer de ces deux librairies (20.9k :star: / 23.1k :star: sur github) et utiliser du fait maison plutôt que de s’appuyer dessus :roll_eyes:
// OFF TOPIC END

Concernant monolog/monolog comme dit plus haut le module ne le charge pas du tout en considérant que Jeedom le fait (via l’autoloader composer).
Concernant guzzlehttp/guzzle c’est un peu différent, car on voit que core/class/wifilightV2.class.php s’occupe de charger une version « locale »

# L10
if (!class_exists('GuzzleHttp\Client')) {
	require_once dirname(__FILE__) . '/../../3rdparty/lib/guzzlehttp/guzzle/Client.php';
}

Mais ce code n’est pas fonctionnel et lève une erreur. Après débogage XDebug la voici :

# 3rdparty/lib/guzzlehttp/guzzle/Client.php
class Client implements ClientInterface, \Psr\Http\Client\ClientInterface
{
...
}

ClientInterface n’est pas trouvé ; problème de namespace.

Fix temporaire

A la racine de jeedom

composer require monolog/monolog:^2 guzzlehttp/guzzle:^6

Tout fonctionne ensuite :slight_smile: (Mais à chaque MAJ Jeedom c’est KO vu que le dossier vendor est systématiquement supprimé pendant l’update, la aussi pour une raison qui m’échappe…)

Fix permanent

Je ne connais pas les « bonnes pratiques » spécifiques à Jeedom pour utiliser des librairies php tiers dans les modules mais la bonne pratique php (et pas que!) est de ne pas les embarquer et de s’appuyer plutot sur composer. Donc pour moi à minima il faudrait embarquer un composer.json (et composer.lock) dans le module. Lors de l’installation des dépendances faire un composer install. Enfin dans le code source du module, charger l’autoloader généré par composer.

Merci