Использование библиотек PEAR в пользовательских модулях Magento приводит к ошибке «Не удалось открыть ...» - PullRequest
1 голос
/ 20 июня 2011

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

Неустранимая ошибка: require_once () [function.require]: Не удалось открыть обязательный файл 'XML / Parser.php' (include_path = '/ Users / jeremymoore / Сайты / Helm / html / app / code / local: / Users / jeremymoore /Sites/Helm/html/app/code/community:/Users/jeremymoore/Sites/Helm/html/app/code/core:/Users/jeremymoore/Sites/Helm/html/lib:.:/Applications/MAMP/ bin / php5 / lib / php: / usr / loca / zend // share / 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 Ответ

1 голос
/ 20 июня 2011

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

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

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

http://alanstorm.com/magento_base_directories

...