Файлы поставщиков автозагрузки Symfony, похоже, не работают

StackOverflow https://stackoverflow.com/questions/4800996

Вопрос

Я создаю проект 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top