Файлы поставщика автозагрузки Symfony, похоже, не работают - PullRequest
2 голосов
/ 26 января 2011

Я создаю проект 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 ( source ) следующим образом:

$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 () [.require ]: сбой открытия необходим 'Crypt / RSA / ErrorHandler.php' (include_path = '.: / opt / local / lib / php') в / app_path / lib / vendor / Crypt / RSA / KeyPair.php on line 28

Изучая файл Crypt / RSA.php ( source ), он вызывает 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 on line 70

Я пробовал копаться в документах, но большинство моих поисков в Google указывают на документы Symfony для 1.0, а не для 1.4и все документы, как правило, расплывчаты в файлах поставщика с автозагрузкой.

Полагаю, другой вариант - вручную требовать_конфигурируемый мной файл RSA.php, но яПонимание этого нарушило бы соглашение Symfony и, вероятно, делало бы что-то сложнее, чем следовало бы (хотя эта функция автозагрузки кажется более сложной, чем должна быть).

1 Ответ

4 голосов
/ 26 января 2011

Вы можете попытаться создать свой собственный автозагрузчик для пакета поставщика Crypt_RSA и зарегистрировать его в ProjectConfiguration, поскольку они представлены в документации Jobeet (при использовании Zend Lucene).

...