Пакет Composer дублирует каталоги при установке

У меня есть локальная зависимость, размещенная в частном репозитории Gitlab. Однако мне трудно вставить это в свой проект через Composer.

Мой composer.json:

"require": {
    "crmpicco/GolfBundle": "dev-master"
},
"repositories": [
    {
        "type": "package",
        "package": {
        "name": "crmpicco/GolfBundle",
        "version": "dev-master",
        "source": {
            "url": "https://git.crmpicco.com/rfc1872/golfbundle.git",
            "type": "git",
            "reference": "master"
        },
        "autoload": {
            "psr-4": {
                "crmpicco\\GolfBundle\\": ""
            }
        }
        }
    }
],

Когда я смотрю в каталог поставщика, каталоги удваиваются, когда я этого не ожидал, например /vendor/crmpicco/GolfBundle/crmpicco/GolfBundle

Когда я запускаю composer update crmpicco\GolfBundle, я получаю следующую ошибку, когда Symfony пытается сделать кеш: clear:

Скрипт Sensio \ Bundle \ DistributionBundle \ Composer \ ScriptHandler :: clearCache, обрабатывающий событие post-update-cmd, завершенное с исключением

[RuntimeException]
Произошла ошибка при выполнении команды "'cache: clear --no-warmup'":

PHP Fatal error:  Uncaught Symfony\Component\Debug\Exception\ClassNotFoundException: Attempted   
  to load class "crmpiccoGolfBundle from namespace "crmpicco\GolfBundle".         
  Did you forget a "use" statement for "crmpicco\GolfBundle\crmpiccoGolfBundle"?   
  in /var/www/crmpicco/symfony/app/AppKernel.php:31   

Что я упускаю / делаю неправильно при настройке composer.json?

Структура каталога пакета:

/crmpicco
   /GolfBundle
      /Component      
      /DependencyInjection
      crmpiccoGolfBundle.php

Пакет composer.json:

{
  "name": "crmpicco/GolfBundle",
  "type": "library",
  "description": "A Symfony 2 bundle which provides an easy way to handle billing and subscriptions.",
  "license": "MIT", 
  "require": {
    "php": ">=7.0",
    "symfony/config": "~2.8.34",
    "symfony/dependency-injection": "~2.8.34",
    "symfony/http-kernel": "~2.8.34",
  },
  "autoload": {
    "psr-4": {
      "crmpicco\\GolfBundle\\": ""
    }
  },
  "extra": {
    "symfony-app-dir": "app",
    "symfony-web-dir": "web",
    "symfony-assets-install": "relative"
  }
}

Не могли бы вы вставить сюда структуру каталогов вашего GolfBundle и его composer.json?

Nikita Leshchev 23.07.2018 06:10

@NikitaLeshchev Привет, конечно. Я обновил вопрос. У меня нет composer.json в моем каталоге.

crmpicco 23.07.2018 06:18

@NikitaLeshchev Приносим извинения за путаницу, я добавил composer.json, который принадлежит моему комплекту, к вопросу выше.

crmpicco 23.07.2018 06:48
Стоит ли изучать 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 и хотите разрабатывать...
1
3
143
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

ОК. Как я вижу, у вас неправильная конфигурация автозагрузки psr-4 в composer.json вашего пакета Вы должны изменить его на следующее:

"autoload": {
    "psr-4": {
        "crmpicco\\GolfBundle\\": "crmpicco/GolfBundle"
    }
}

Также, если вы не хотите дублировать каталоги, переместите содержимое пакета в корневой каталог, а затем не изменяйте содержимое composer.json. Каталоги дублируются, потому что Composer создает структуру каталога на основе свойства name, которое в вашем случае также является crmpicco/GolfBundle.

Это помогает, и мне удалось избавиться от дублированных каталогов, однако я не могу загрузить пакет в свой AppKernel. Внутри registerBundles я делаю это: new crmpicco\GolfBundle\crmpiccoGolfBundle(),, и в моем каталоге vendor у меня есть: /vendor/crmpicco/GolfBundle, в котором есть весь код, включая crmpiccoGolfBundle.php, в котором я получаю сообщение об ошибке: PHP Fatal error: Uncaught Symfony\Component\Debug\Exception\ClassNotFoundException: Attempted to load class "crmpiccoGolfBundle" from namespace "crmpicco\GolfBundle". Я не вижу, где я здесь ошибаюсь ...

crmpicco 23.07.2018 10:26

Раздел composer.jsonautoload в комплекте выглядит так: "autoload": { "psr-4": { "crmpicco\\GolfBundle\\": "" } },. Я также должен указать, что я очистил кеш композитора с помощью composer clear-cache. Любая помощь приветствуется.

crmpicco 23.07.2018 10:28

@crmpicco какую версию Symfony вы используете?

Nikita Leshchev 23.07.2018 10:30

Я на 2.8 LTS.

crmpicco 23.07.2018 10:30

@crmpicco Попробуйте composer dump-autoload. Также проверьте пространство имен вашего класса crmpiccoGolfBundle. Возможно, есть ошибка в именовании классов или пространстве имен

Nikita Leshchev 23.07.2018 10:31
Ответ принят как подходящий

Вы не должны использовать тип package для репозиториев, которые содержат действительный composer.json. Этот тип был разработан для пакетов без composer.json, поэтому этот файл будет полностью проигнорирован, как и обновления в вашем пакете.

В вашем случае лучше определить его как git:

"repositories": [
    {
        "type": "git",
        "url": "https://git.crmpicco.com/rfc1872/golfbundle.git"
    }
],

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