У меня есть локальная зависимость, размещенная в частном репозитории 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"
}
}
@NikitaLeshchev Привет, конечно. Я обновил вопрос. У меня нет composer.json в моем каталоге.
@NikitaLeshchev Приносим извинения за путаницу, я добавил composer.json, который принадлежит моему комплекту, к вопросу выше.






ОК. Как я вижу, у вас неправильная конфигурация автозагрузки 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". Я не вижу, где я здесь ошибаюсь ...
Раздел composer.jsonautoload в комплекте выглядит так: "autoload": { "psr-4": { "crmpicco\\GolfBundle\\": "" } },. Я также должен указать, что я очистил кеш композитора с помощью composer clear-cache. Любая помощь приветствуется.
@crmpicco какую версию Symfony вы используете?
Я на 2.8 LTS.
@crmpicco Попробуйте composer dump-autoload. Также проверьте пространство имен вашего класса crmpiccoGolfBundle. Возможно, есть ошибка в именовании классов или пространстве имен
Вы не должны использовать тип package для репозиториев, которые содержат действительный composer.json. Этот тип был разработан для пакетов без composer.json, поэтому этот файл будет полностью проигнорирован, как и обновления в вашем пакете.
В вашем случае лучше определить его как git:
"repositories": [
{
"type": "git",
"url": "https://git.crmpicco.com/rfc1872/golfbundle.git"
}
],
Не могли бы вы вставить сюда структуру каталогов вашего GolfBundle и его
composer.json?