Я делаю обработчик запросов для php, который будет направлять запросы к определенным файлам на сервере. У меня есть файл .htaccess, который направляет каждый запрос на DOCUMENT_ROOT/Server/handleRequest.php, который затем обрабатывает все остальное оттуда. Чтобы это работало, я копирую файл .htaccess и папку Server в корневую папку своего сайта.
Мне удалось заставить композитора установить мой проект в каталог поставщика под vendor/JakarCo/PHP-Request-Handler. Я бы хотел, чтобы все файлы (по крайней мере, файл .htaccess) были установлены непосредственно в корневую папку документов сайта (на один уровень выше папки поставщика).
Я пытаюсь использовать oomphinc/composer-installers-extender для установки пользовательского пути, но он не работает, и я не могу понять, как это исправить.
composer.json в обработчике запросов
{
"name": "JakarCo/PHP-Request-Handler",
"description": "php request handler",
"type": "library",
"license": "proprietary",
"require": {
"php": "^5.3.6 || ^7.0",
"oomphinc/composer-installers-extender": "@dev"
},
"extra": {
"installer-types": ["library"],
"installer-paths": {
"my/path/": ["JakarCo/PHP-Request-Handler/"],
"path/to/libraries/JakarCo/": ["type:library"]
}
}
}
composer.json для проекта, который включает обработчик запросов:
{
"repositories": [
{
"url": "https://github.com/JakarCo/PHP-Request-Handler",
"type": "vcs"
}
],
"require": {
"JakarCo/PHP-Request-Handler": "dev-master"
}
}
Когда я запускаю composer update из корневой папки сайта, он работает успешно (теперь менять нечего). Поэтому я удалил папку vendor и файл composer.lock и запустил composer install, и у меня было три успешных установки: composer / installer, oomphinc и моя. Но мой все еще идет в vendor/JakarCo/PHP-Request-Handler, когда папка Server и файлы .htaccess должны попасть в корневую папку сайта.
Я подозреваю, что моя проблема связана с installer-paths, но я не могу понять, как это должно быть. Кроме того, я, вероятно, не должен использовать @dev для версии oomphinc, но я не знаю, что еще поставить.
У меня есть опыт работы с PHP, но я очень мало практикую, и я новичок в использовании композитора и git.
Почему вы устанавливаете его как зависимость / библиотеку, если он должен работать как проект?
@ rob006 Я попытался установить тип как проект, но, похоже, ничего не изменилось. Документация толком ничего не прояснила. Но сейчас я читаю еще немного. Я действительно не понимаю, как он использует разные типы.






ОБНОВИТЬ
Получилось плохо. Очень плохо, лол. Composer.json из проекта обработчика запросов перезаписал файл composer.json, который я использовал для его включения.
-
Я написал свой собственный установщик, используя https://getcomposer.org/doc/articles/custom-installers.md в качестве руководства, просто скопировав то, что у них было.
Важные примечания: composer.json для сайта, над которым я работаю, требует указателя на обработчик запросов и указателя на установщик обработчика запросов, как показано ниже. Я попытался поместить указатель на установщик в проект обработчика запросов, но позже я прочитал, что часть repositories читается только корневым композитором. То есть файл composer.json в рабочем каталоге, из которого вы вызываете composer install/composer update. В качестве альтернативы, проект установщика можно добавить в packagist, тогда проект обработчика запросов сможет потребовать его напрямую.
Мне было трудно заставить установщик начать работу. Это потому, что $packageType, переданный supports() в установщике, имеет нижний регистр, а указанный мной тип включает прописные, поэтому return $packageType === 'JakarCo-request-installer превратился в `return $ packageType == strtolower ('JakarCo-request-installer').
Другая проблема, с которой я столкнулся, заключалась в том, что композитор сказал мне, что имя каталога, возвращаемое getInstallPath, не может быть пустым, когда я делал return '/'. Я перешел на return ./, но проблемы остались. Я записал composer clear-cache, затем rm -rf vendor, затем rm composer.lock, затем повторно преобразовал composer install, и теперь он работает.
Все это могло бы быть намного лучше, но пока мне нужны только базовые функции. Позже я улучшу качество своего кода. Я новичок в композиторе, и все это меня ошеломляет, и мне трудно следовать документации.
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/JakarCo/PHP-Request-Handler"
},
{
"type": "vcs",
"url": "https://github.com/JakarCo/PHP-Request-Handler-Installer"
}
],
"require": {
"JakarCo/PHP-Request-Handler": "dev-master",
"JakarCo/PHP-Request-Handler-Installer": "dev-master"
}
}
Итак, репозитории нужно было определить в проекте сайта. Определение репозиториев в проекте обработчика запросов ничего не дало, и затем не удалось найти установщик-обработчик запросов, потому что композитор не работает рекурсивно в этом вопросе, если только ваши проекты не находятся в packagist, и в этом случае вы не определяете репозитории. Раздражает, но работает.
Кроме того, обработчик запросов - это очень ранняя версия, и я знаю, что нужно многое улучшить. Если мне не удается заставить установку композитора работать, я могу вручную скопировать и вставить файл .htaccess и использовать классы с именами для других документов и использовать автозагрузчик. Но этим я лучше займусь позже.