#php #composer-php #phpword #phpoffice
#php #композитор-php #phpword #phpoffice
Вопрос:
У меня есть PHPWORD в каталоге /libraries /PHPOffice / PHPWord /. Я пытаюсь использовать его в совершенно другой части приложения (веб-сайт Joomla) следующим образом:
require_once JPATH_LIBRARIES.'/vendor/autoload.php'; //composer
require_once JPATH_LIBRARIES.'/PhpOffice/PhpWord/PhpWord.php';
$Wzor = new PhpOfficePhpWordTemplateProcessor(JPATH_ROOT.'/images/powiadomienia/SzablonPowiadomienia.docx');
Но я получаю ошибку:
Класс ‘PHPOffice PHPWord TemplateProcessor’ не найден
Я перепробовал много вариантов и путей, я пытался прочитать онлайн-справку, но всегда с одним и тем же результатом. Могу ли я попросить о некоторой помощи и руководстве? Как я могу включить такой класс в свой скрипт?
Комментарии:
1. Почему бы вам просто не загрузить его как часть Composer? github.com/PHPOffice/PHPWord#installation
Ответ №1:
Используйте /vendor
папку, а не «библиотеки» (смотрите почему ниже).
В корневой папке вашего проекта:
composer require phpoffice/phpword
Затем:
require_once JPATH_ROOT.'/vendor/autoload.php';
$Wzor = new PhpOfficePhpWordTemplateProcessor(JPATH_ROOT.'/images/powiadomienia/SzablonPowiadomienia.docx');
ПРЕДУПРЕЖДЕНИЕ:
НИКОГДА не запускайте «composer require» внутри папки «/libraries», поскольку это ПРИВЕДЕТ К УДАЛЕНИЮ ядра Joomla в более поздних версиях. Это происходит потому, что люди использовали эту папку, и чтобы подчеркнуть, что ее не следует использовать, основная команда Joomla удалила из нее файл composer.json. Из-за этого ядро Joomla стирается при попытке добавить библиотеки в эту папку.
Почему бы не использовать «/libraries»?
Из https://docs.joomla.org/J3.x:Using_Composer_with_Joomla:
Можете ли вы установить какие-либо дополнительные библиотеки через Composer?
На данный момент нет в Joomla! 3.4. В долгосрочной перспективе целью CMS является возможность загрузки дополнительных пакетов. Чтобы подчеркнуть это, мы пока не будем выпускать файл composer.json в основной Joomla! Скачать.
Комментарии:
1. Спасибо. Но я не использовал composer напрямую. PHPWord уже был в каталоге библиотеки. Я просто искал способ включить класс в скрипт. Из того, что я нашел, JLoader::registerNamespace был просто необходим для поиска этих классов.
Ответ №2:
Из того, что я выяснил, проблема заключалась в использовании фреймворка — Joomla. У него есть свой собственный метод для обнаружения классов. Мне пришлось поместить файлы в папку / libraries / src, а затем поместить этот код для использования этого класса:
JLoader::registerNamespace('PhpOffice', JPATH_LIBRARIES . '/src');
$objPHPWord = new PhpOfficePhpWordPhpWord();
Ответ №3:
вам необходимо установить phpoffice / phpword с помощью composer
composer require phpoffice/phpword