Les fichiers des fournisseurs de chargement automatique de symfony ne semble pas fonctionner
-
22-10-2019 - |
Question
Je construis un projet Symfony 1.4, et je tente d'utiliser PEAR de Crypt_RSA paquet. Malheureusement, le paquet n'a pas été mis à jour en temps, donc au lieu de faire simple pear install
de la ligne de commande, je veux inclure dans mon chemin de projet lib/vendor
afin que je puisse modifier divers morceaux de code pour une utilisation dans PHP5. (Il provoque actuellement des avertissements et des erreurs strictes, et je ne veux pas désactiver le contrôle d'erreur stricte).
Je créé un fichier autoload.yml
dans mon chemin de config
qui contient maintenant ce qui suit:
autoload:
Crypt_RSA:
path: %SF_LIB_DIR%/vendor/Crypt
recursive: true
Je tente alors d'utiliser la classe Crypt_RSA_KeyPair ( Source ) de la manière suivante:
$keyPair = new Crypt_RSA_KeyPair(128);
Il en résulte l'erreur suivante:
Attention : require_once (Crypte / RSA / ErrorHandler.php) [ function.require-fois ]: pas flux ouvert: Aucun fichier ou répertoire /app_path/lib/vendor/Crypt/RSA/KeyPair.php en ligne < strong> 28
erreur irrécupérable : require_once () [ fonction. exiger ]: Failed opening required 'Crypte / RSA / ErrorHandler.php' (include_path = '/ opt / local / lib / php') in / app_path / lib / vendor / Crypte / RSA / KeyPair.php en ligne 28
Recherche dans le fichier crypte / RSA.php ( la source), il a des appels require_once pour Crypt / RSA / ErrorHandler.php, Crypte / RSA / MathLoader.php, Crypte / RSA / Key.php et crypte / RSA / KeyPair.php, donc Je pense que je ne veux pas symfony à tout chargement automatique (ie: non autoLoad récursive) - juste le fichier RSA.php. Cependant, les appels de require_once sont spécifiques au dossier contenant le dossier crypte, ce qui signifie que le chargement automatique doit faire en sorte que lorsque RSA.php est chargé, il le charge du bon chemin de telle sorte que chacun de ces fichiers peuvent être chargés correctement.
Dans cet esprit, j'ai essayé quelques réglages différents sans chance:
autoload:
Crypt_RSA:
path: %SF_LIB_DIR%/vendor
files: [Crypt/RSA.php]
recursive: false
et
# moved "Crypt" folder into a subfolder named "pear"
autoload:
Crypt_RSA:
path: %SF_LIB_DIR%/vendor/pear
recursive: false
Chacune de ces nouvelles tentatives a donné lieu à une autre erreur dans lequel la classe Crypt_RSA_KeyPair était tout simplement pas trouvé tout à fait.
Erreur fatale : Class 'Crypt_RSA_KeyPair' ne se trouve pas dans la ligne /app_path/lib/model/doctrine/sfDoctrineGuardPlugin/sfGuardUser.class.php 70
J'ai essayé de creuser à travers les documents, mais la plupart de mes recherches Google pointent vers Symfony docs pour 1.0 plutôt que 1.4, et tous les documents sont généralement vagues sur autoloading fichiers fournisseurs.
Je suppose une autre option serait de require_once manuellement le fichier RSA.php j'ai besoin, mais je devine que enfreindrait convention Symfony, et probablement faire quelque chose plus dur que je devrais être (même si cette chose autoloading semble être plus difficile qu'il doit être trop).
La solution
Vous pouvez essayer de créer votre chargeur automatique personnalisé pour l'ensemble des fournisseurs Crypt_RSA et l'enregistrer dans le ProjectConfiguration, comme ils présenté dans la documentation Jobeet (en utilisant Zend Lucene).