加载本地 Symfony 包时出现 ClassNotFoundException
ClassNotFoundException when loading local Symfony bundle
我尝试在我的应用程序中安装自定义 Symfony 包。
我创建了具有以下文件夹结构的包:
.
├── composer.json
├── composer.lock
└── src
└── Namespace
└── CoreBundle
├── Controller ...
├── CoreBundle.php
├── Entity ...
├── Helper ...
├── Repository ...
├── Resources ...
├── Services ...
└── Tests ...
我通过 composer install
在 vendor
文件夹中成功安装了捆绑包。它作为符号-link 在 vendor/namespace/core-bundle
下(我在本地加载它)。
之后,我在 AppKernel.php
中添加了 new Namespace\CoreBundle\CoreBundle(),
,这会产生以下错误:
(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"
}
}
}
我感觉你在 composer.json
中添加自动加载之前 运行 composer install
。这样做的问题是,安装会忽略 .json 文件,并直接进入锁定文件,锁定存储所有以前的依赖项,使其处于先前测试的状态。
您要找的是composer update
。它丢弃 .lock 文件,并为以后的安装命令生成一个新的 .lock 文件。
每次手动更新 composer.json
中的 autoload
部分后:
{
"autoload": {
"psr-4": {
"Namespace\CoreBundle\": "src/Namespace/CoreBundle"
}
}
}
不要忘记通过 CLI 刷新 你生成的/vendor/autoload.php
:
composer dump
# shortcut for `composer dump-autoload`
我尝试在我的应用程序中安装自定义 Symfony 包。 我创建了具有以下文件夹结构的包:
.
├── composer.json
├── composer.lock
└── src
└── Namespace
└── CoreBundle
├── Controller ...
├── CoreBundle.php
├── Entity ...
├── Helper ...
├── Repository ...
├── Resources ...
├── Services ...
└── Tests ...
我通过 composer install
在 vendor
文件夹中成功安装了捆绑包。它作为符号-link 在 vendor/namespace/core-bundle
下(我在本地加载它)。
之后,我在 AppKernel.php
中添加了 new Namespace\CoreBundle\CoreBundle(),
,这会产生以下错误:
(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"
}
}
}
我感觉你在 composer.json
中添加自动加载之前 运行 composer install
。这样做的问题是,安装会忽略 .json 文件,并直接进入锁定文件,锁定存储所有以前的依赖项,使其处于先前测试的状态。
您要找的是composer update
。它丢弃 .lock 文件,并为以后的安装命令生成一个新的 .lock 文件。
每次手动更新 composer.json
中的 autoload
部分后:
{
"autoload": {
"psr-4": {
"Namespace\CoreBundle\": "src/Namespace/CoreBundle"
}
}
}
不要忘记通过 CLI 刷新 你生成的/vendor/autoload.php
:
composer dump
# shortcut for `composer dump-autoload`