2011-01-26 1 views
2

Я строю проект Symfony 1.4, и я пытаюсь использовать пакет PEAR Crypt_RSA. К сожалению, пакет не обновлялся за некоторое время, поэтому вместо того, чтобы делать простой pear install из командной строки, я хочу включить его в свой путь проекта lib/vendor, чтобы я мог модифицировать различные фрагменты кода для использования в PHP5. (В настоящее время он вызывает некоторые предупреждения и строгие ошибки, и я не хочу отключать строгую проверку ошибок).Файлы для автозагрузки Symfony, похоже, не работают

Я создал autoload.yml файл в моем config пути, который теперь содержит следующее:

autoload: 
    Crypt_RSA: 
     path:  %SF_LIB_DIR%/vendor/Crypt 
     recursive: true 

я затем пытаться использовать класс Crypt_RSA_KeyPair (source) следующим образом:

$keyPair = new Crypt_RSA_KeyPair(128); 

Это приводит к следующей ошибке:

Warning: require_once(Crypt/RSA/ErrorHandler.php) [ function.require-once ]: failed to open stream: No such file or directory in /app_path/lib/vendor/Crypt/RSA/KeyPair.php on line 28

Fatal error: require_once() [ function.require ]: Failed opening required 'Crypt/RSA/ErrorHandler.php' (include_path='.:/opt/local/lib/php') in /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 был просто не нашли вообще.

Fatal error: Class 'Crypt_RSA_KeyPair' not found in /app_path/lib/model/doctrine/sfDoctrineGuardPlugin/sfGuardUser.class.php on line 70

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

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

ответ

4

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

+0

Отлично, спасибо! –

+0

Просто сообщила, что это определенно сделало трюк для меня. Я очень ценю помощь :) –