Zend_Translate в вызовах Ajax

В настоящее время я занимаюсь локализацией проекта с помощью Zend_Translate. При попытке использовать адаптер в php-файле, запрошенном вызовом ajax, я получаю следующее сообщение об ошибке:

Warning: require_once(Zend/Exception.php): failed to open stream:
File or Folder not found in
/my/include/path/Zend/Translate/Exception.php on
line 26

Fatal error: require_once(): Failed opening required
'Zend/Exception.php' (include_path='my/include/path') in
/my/include/path/Zend/Translate/Exception.php on
line 26

Таким образом, это кажется проблемой относительного пути. Меня особенно смущает ошибка 'require_once(Zend/Exception.php)', поскольку в основной папке Zend такого файла нет, однако, как было сказано ранее, не-ajax-вызовы работают нормально.

Я попытался использовать операторы if, чтобы проверить, откуда вызывается файл, и соответствующим образом настроить include_path. Это, по крайней мере, позволило следующим строкам работать как в вызовах ajax, так и в вызовах без ajax.

require(get_include_path().'/Zend/Translate.php');

Zend_Loader::loadClass('Zend_Translate');

Однако вышеупомянутые ошибки сохраняются.

Zend загружается из класса-оболочки. Вот структура пути:

class/                   class files, including a Zend wrapper class
js/                      js-files
js/ajax/                 php-files
vendor/Zend/...          Zend_Translate files

Дайте мне знать, если дополнительная информация окажется полезной.


person DanceMichi    schedule 13.12.2015    source источник


Ответы (1)


Добавьте следующие строки, прежде чем начать использовать Zend Translate как независимый компонент.

set_include_path(implode(PATH_SEPARATOR, array(
    realpath('path/to/zend/library'),
    get_include_path(),
)));

     require_once 'Zend/Loader/Autoloader.php';

        $autoloader = Zend_Loader_Autoloader::getInstance();

Где

путь/к/zend/библиотеке

папка библиотеки Zend Framework 1, внутри которой находится каталог Zend.

person Mr Coder    schedule 14.12.2015
comment
Спасибо за вашу идею. Но это не помогает. Обратите внимание, что я использую только адаптер Zend_Translate, а не полный ZF. Удаление оператора require_once приводит к фатальной ошибке: Класс 'Zend_Exception' не найден в /my/include/path/Zend/Translate/Exception.php в строке 36; неудивительно, поскольку эта строка определяет класс, расширяющий Zend_Exception. Удаление этого класса также приводит к фатальным ошибкам в адаптере Gettext. Опять же, только для вызовов ajax. - person DanceMichi; 14.12.2015
comment
@DanceMichi Привет, я обновил свой ответ, пожалуйста, проверьте сейчас. - person Mr Coder; 15.12.2015
comment
Наконец заработало. Проблема заключалась в том, что Exception.php в основной папке Zend действительно отсутствовал. По-видимому, это не пришло с zip, который я скачал. При добавлении относительных путей для вызовов ajax через set_include_path теперь все работает гладко. Понятия не имею, почему эта проблема возникла только с вызовами ajax. Тем не менее спасибо! - person DanceMichi; 18.12.2015