Файлы поставщиков автозагрузки Symfony, похоже, не работают
-
22-10-2019 - |
Вопрос
Я создаю проект Symfony 1.4 и пытаюсь использовать PEAR. Crypt_RSA упаковка.К сожалению, пакет уже давно не обновлялся, поэтому вместо простого pear install
из командной строки, я хочу включить его в свой lib/vendor
путь к проекту, чтобы я мог изменять различные фрагменты кода для использования в PHP5.(В настоящее время это вызывает некоторые предупреждения и строгие ошибки, и я не хочу отключать строгую проверку ошибок).
Я создал autoload.yml
файл в моем config
путь, который теперь содержит следующее:
autoload:
Crypt_RSA:
path: %SF_LIB_DIR%/vendor/Crypt
recursive: true
Затем я пытаюсь использовать класс Crypt_RSA_KeyPair (источник) следующим образом:
$keyPair = new Crypt_RSA_KeyPair(128);
Это приводит к следующей ошибке:
Предупреждение:require_once(Crypt/RSA/ErrorHandler.php) [function.require-once]:не удалось открыть поток:нет такого файла или директории в /app_path/lib/vendor/Crypt/RSA/KeyPair.php В сети 28
Фатальная ошибка:require_once() [функция.требовать]:Не удалось открыть требуемый «Crypt/RSA/ErrorHandler.php» (include_path='.:/opt/local/lib/php') в /app_path/lib/vendor/Crypt/RSA/KeyPair.php В сети 28
Просмотр файла Crypt/RSA.php (источник), у него есть вызовы require_once для Crypt/RSA/ErrorHandler.php, Crypt/RSA/MathLoader.php, Crypt/RSA/Key.php и Crypt/RSA/KeyPair.php, поэтому я думаю, что не хочу symfony для автозагрузки всего (т.е.:не рекурсивная автозагрузка) — только файл RSA.php.Однако все вызовы require_once специфичны для папки, содержащей папку Crypt, а это означает, что автозагрузка должна гарантировать, что при загрузке RSA.php он загружается по правильному пути, чтобы каждый из этих файлов мог быть загружен правильно.
Имея это в виду, я попробовал несколько разных настроек, но безуспешно:
autoload:
Crypt_RSA:
path: %SF_LIB_DIR%/vendor
files: [Crypt/RSA.php]
recursive: false
и:
# moved "Crypt" folder into a subfolder named "pear"
autoload:
Crypt_RSA:
path: %SF_LIB_DIR%/vendor/pear
recursive: false
Каждая из этих новых попыток приводила к разным ошибкам, из-за которых класс Crypt_RSA_KeyPair просто не был найден вообще.
Фатальная ошибка:Класс «Crypt_RSA_KeyPair» не найден в /app_path/lib/model/doctrine/sfDoctrineGuardPlugin/sfGuardUser.class.php В сети 70
Я пытался покопаться в документации, но большинство моих поисков в Google указывают на документы Symfony для версии 1.0, а не для версии 1.4, и все документы, как правило, неясны в отношении автозагрузки файлов поставщиков.
Я предполагаю, что другим вариантом было бы вручную require_once файл RSA.php, который мне нужен, но я предполагаю, что это нарушит соглашение Symfony и, вероятно, сделает что-то сложнее, чем мне следовало бы (хотя эта вещь с автозагрузкой кажется сложнее, чем она есть). тоже должно быть).
Решение
Вы можете попытаться создать собственный автозагрузчик для пакета поставщика Crypt_RSA и зарегистрировать его в ProjectConfiguration, поскольку они представлено в документации Jobeet (при использовании Zend Lucene).