Symfony2 - 在链配置的命名空间中找不到 class 'X'

Symfony2 - The class 'X' was not found in the chain configured namespaces

我一直在寻找解决我的问题的方法。但是我找不到任何解决方案。

我尝试打开主页时总是收到此错误消息:

未捕获异常 'Doctrine\Common\Persistence\Mapping\MappingException',消息为“class 'Test\Bundle\UserBundle\Entity\User' 未在链配置的名称空间中找到,位于...

奇怪的是我只有在关注 URL:

http://localhost/

但是当我 运行 在这个 URL 上时,我没有收到任何错误并且我的页面显示正确:

http://localhost/app_dev.php

我的配置如下所示 (config.yml):

# Doctrine Configuration
dbal:
  default_connection: default
  connections:
    default:
      driver:   "%database_driver%"
      host:     "%database_host%"
      port:     "%database_port%"
      dbname:   "%database_name%"
      user:     "%database_user%"
      password: "%database_password%"
      charset:  UTF8
    test:
      driver:   "%database_driver2%"
      host:     "%database_host2%"
      port:     "%database_port2%"
      dbname:   "%database_name2%"
      user:     "%database_user2%"
      password: "%database_password2%"
      charset:  UTF8
orm:
  default_entity_manager: default
  entity_managers:
    default:
      connection: default
      mappings:
        TestUserBundle:
          type: annotation

我在自定义服务中这样调用 Doctrine:

public function __construct(EntityManager $em)
{
    $repositiory = $em->getRepository('Test\Bundle\UserBundle\Entity\User');
    $this->user = $repositiory->find($_SERVER['AUTH_USER']);
}

我的 Symfony 应用程序 运行正在 IIS Web 服务器上运行。

你们知道我哪里出错了吗?

映射名称是TestUserBundle但是路径是Test\Bundle\User\Bundle,难道不应该命名为TestBundleUserBundle吗?此外,通常 mappingsauto_generate_proxy_classes 在开发模式下设置为 true 这可能解释了为什么它在那里工作而不是在产品中工作。

您可能想查看 documentation (Symfony 2.7),它显示了您应该如何根据您的情况准确配置映射。

捆绑包中的自定义映射实体

doctrine:
    # ...
    orm:
        # ...
        auto_mapping: true
        mappings:
            # ...
            AppBundle:
                type: xml
                dir: SomeResources/config/doctrine

映射束外的实体

doctrine:
    # ...
    orm:
        # ...
        mappings:
            # ...
            SomeEntityNamespace:
                type: annotation
                dir: "%kernel.root_dir%/../src/Entity"
                is_bundle: false
                prefix: App\Entity
                alias: App

最后但并非最不重要的一点是,在对 config.ymlapp/config/ 目录中的文件应用更改后始终清除缓存目录。

如评论中所述: 您需要暂时停止任何可能正在使用 prod 目录的 PHP 进程(即,如果您有 运行 控制台 server:run)并重试。如果不行,试试 this

事实证明,我的错误是我忘记在我的 AppKernel 文件中的 "vendor" 中添加 distant bundles/bundles。

它们没有在 "registerBundles" 函数中注册。