我尝试在我的应用程序中安装自定义Symfony软件包。 我使用以下文件夹结构创建了包:
.
├── composer.json
├── composer.lock
└── src
└── Namespace
└── CoreBundle
├── Controller ...
├── CoreBundle.php
├── Entity ...
├── Helper ...
├── Repository ...
├── Resources ...
├── Services ...
└── Tests ...
我在composer install
文件夹中成功安装了vendor
的捆绑包。它在vendor/namespace/core-bundle
下作为sym-link(我在本地加载)。
之后我在new Namespace\CoreBundle\CoreBundle(),
中添加了AppKernel.php
,这会产生以下错误:
(1/1) ClassNotFoundException
Attempted to load class "CoreBundle" from namespace "Namespace\CoreBundle".
Did you forget a "use" statement for another namespace?
in AppKernel.php (line 25)
我试图在vendor
文件夹中手动复制文件夹,如果sym-link有任何问题,但它会产生相同的错误。我在dump(ClassMapGenerator::createMap('/path/to/symfony'));
检查了自动加载的类,但我在那里找不到我的命名空间。我的配置错误或我的文件夹结构?如果您需要更多代码,我会尽快更新我的问题。
更新:我的捆绑composer.json
:
{
"name": "namespace/core-bundle",
"license": "proprietary",
"type": "symfony-bundle",
"autoload": {
"psr-4": {
"Namespace\\CoreBundle\\": "src/Namespace/CoreBundle"
}
},
"require": {
"doctrine/doctrine-bundle": "^1.6",
"doctrine/orm": "^2.5",
"liip/imagine-bundle": "1.9.*",
"php": ">=5.5.9",
"symfony/symfony": "3.3.*"
},
"require-dev": {
},
"extra": {
"branch-alias": {
"dev-master": "development"
}
}
}
答案 0 :(得分:1)
我感觉您在composer install
的自动加载中添加自动加载之前已经运行composer.json
。这个问题是,安装忽略了.json文件,并直接进入锁定文件,并且锁存储所有以前的依赖项,使其处于先前测试的状态。
您要找的是composer update
。它会丢弃.lock文件,并为将来的安装命令生成一个新的.lock文件。
答案 1 :(得分:1)
在autoload
的{{1}}部分的每次手动更新之后:
composer.json
不要忘记通过CLI刷新生成的{
"autoload": {
"psr-4": {
"Namespace\\CoreBundle\\": "src/Namespace/CoreBundle"
}
}
}
:
/vendor/autoload.php