Как мне установить мой проект github в корневой каталог с помощью композитора?

Я делаю обработчик запросов для 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.

Кроме того, обработчик запросов - это очень ранняя версия, и я знаю, что нужно многое улучшить. Если мне не удается заставить установку композитора работать, я могу вручную скопировать и вставить файл .htaccess и использовать классы с именами для других документов и использовать автозагрузчик. Но этим я лучше займусь позже.

Reed 19.09.2018 17:31

Почему вы устанавливаете его как зависимость / библиотеку, если он должен работать как проект?

rob006 20.09.2018 09:41

@ rob006 Я попытался установить тип как проект, но, похоже, ничего не изменилось. Документация толком ничего не прояснила. Но сейчас я читаю еще немного. Я действительно не понимаю, как он использует разные типы.

Reed 21.09.2018 03:41
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
3
751
1

Ответы 1

ОБНОВИТЬ

Получилось плохо. Очень плохо, лол. 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, и в этом случае вы не определяете репозитории. Раздражает, но работает.

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