也许我只是把名称空间搞砸了,但我没有看到。
我试图把Symfony应用程序中的一些类分离成一个包
我在Symfony中得到的错误是:
期望在文件中找到类"Shop\Admin\CategoryAdmin"C:\wamp64\www\call\bounds\Shop\src/Admin\CategoryAdmin.php"从资源"../bundles/Shop/src/*"导入服务,但找不到!检查中与资源一起使用的命名空间前缀C: \wamp64\www\call\config/services.yaml(加载在资源中"C:\wamp64\www\call\config/services.yaml"(。
这是我的服务。yaml:
Shop:
resource: '../bundles/Shop/src/*'
exclude: '../bundles/Shop/src/{Entity,Migrations,Tests}'
ShopController:
resource: '../bundles/Shop/src/Controller'
tags: ['controller.service_arguments']
文件结构如下:
project (C:wamp64wwwgall)
- bundles
- Shop
- src
- Admin
- CategoryAdmin.php
- config
- services.yaml
CategoryAdmin.php文件本身是这样的:
namespace ShopAdmin;
use ShopEntityCategory;
use SonataAdminBundleAdminAbstractAdmin;
use SonataAdminBundleDatagridListMapper;
use SonataAdminBundleDatagridDatagridMapper;
use SonataAdminBundleFormFormMapper;
use SymfonyBridgeDoctrineFormTypeEntityType;
use SymfonyComponentFormExtensionCoreTypeTextType;
use SymfonyComponentFormExtensionCoreTypeCheckboxType;
use SymfonyComponentDependencyInjectionContainerInterface;
use SonataTranslationBundleFilterTranslationFieldFilter;
/**
* Class CategoryAdmin
* @package ShopAdmin
*/
class CategoryAdmin extends AbstractAdmin
{
{...}
}
苏,这些路线看起来和错误中所说的完全一样。我不明白为什么FileLoader找不到这个类,有什么想法吗?
这是一个自动加载问题。
composer.json部分:
"autoload": {
"psr-4": {
"App\": "src/",
}
},
应用程序命名空间绑定到src文件夹。
将Shop名称空间注册为bundles/Shop,并删除bundles/Shop 下的src目录
编辑:我通常为捆绑包做这件事,我还没有准备好发布,但将来会发布。我的一个项目的例子:
"autoload": {
"psr-4": {
"App\": "src/",
"Padam87\AdminBundle\": "bundles/Padam87/AdminBundle/"
}
},
编辑2:不要忘记在更改后运行composer dump-autoload
。