Использование библиотек PEAR в пользовательских модулях Magento приводит к ошибке "Не удалось открыть..."

Я написал модуль Magento для прослушивания события "OrderSave" и выполнения некоторых вызовов API сторонним приложением. Большая часть функциональности работает отлично, но мне нужно было обработать XML-ответ от API, и когда я попытался использовать класс PEAR XML_Unserializer, я получил следующую ошибку:

Неустранимая ошибка: require_once() [function.require]: не удалось открыть обязательный файл 'XML/Parser.php' (include_path='/Users/jeremymoore/Sites/Helm/html/app/code/local:/Users/jeremymoore/Sites/ / Helm / html / приложение / код / ​​сообщества:/Users/jeremymoore/Sites/Helm/html/ приложение / код / ​​ядро:/Users/jeremymoore/Sites/Helm/html/ Библиотека:.:/Applications/MAMP/bin/php5/lib/php:/usr/loca/zend// поделиться /ZendFramework/library') в /Users/jeremymoore/Sites/Helm/html/lib/PEAR/XML/Unserializer.php в строке 58

В моём модуле есть файл Observer.php в модели, который выглядит следующим образом:

<?php
require_once 'lib/PEAR/XML/Serializer.php';
require_once 'lib/PEAR/XML/Unserializer.php';
require_once 'lib/Pest/PestXML.php';
Zend_Loader::registerAutoload();

class Helm_Litmos_Model_Observer
{
    public function hookToOrderSaveEvent()
    {
        //Do API Stuff Here
    }
}

Функция hookToOrderSaveEvent создает новые экземпляры классов сериализатора и десериализатора. До того, как я добавил код Unserializer, у меня было все, что работало для сериализации объектов и выполнения вызовов API. Кажется, что вещи ломаются, когда класс XML_Unserializer пытается ссылаться на Parser.php.

Я не уверен, что метод require_once, который я здесь использую, является подходящим способом для включения этих библиотек. Я использую Magento 1.4.1.1, который в настоящее время используется на моей локальной машине с MAMP.

Буду признателен за любые предложения о лучшем способе автозагрузки или включения этих библиотек для использования в моем модуле или просто идеи о том, как исправить то, что у меня есть.

Спасибо

1 ответ

Решение

Вы можете попробовать и использовать Mage::getBaseDir('lib')

require_once Mage::getBaseDir('lib').'/PEAR/XML/Serializer.php';

Алан имеет хорошую статью о базовых каталогах Magento:

http://alanstorm.com/magento_base_directories

Другие вопросы по тегам