Symfony2 - 在链配置的命名空间中找不到类“X”

Posted

技术标签:

【中文标题】Symfony2 - 在链配置的命名空间中找不到类“X”【英文标题】:Symfony2 - The class 'X' was not found in the chain configured namespaces 【发布时间】:2015-11-12 20:08:03 【问题描述】:

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

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

未捕获的异常 'Doctrine\Common\Persistence\Mapping\MappingException' 带有消息 'The class 'Test\Bundle\UserBundle\Entity\User' is not found in the chain configured namespaces' in...强>

奇怪的是,我只有在我有以下 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 服务器上运行。

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

【问题讨论】:

你做了php app/console cache:clear --env=prod 吗? 我试图这样做,但我得到一个错误,我无法重命名缓存目录“prod” 然后进入目录app/cache/prod,删除该目录下的所有内容。 您需要暂时停止任何可能正在使用prod 目录的PHP 进程(即,如果您已运行console server:run)并重试。如果还是不行,试试***.com/questions/97875/rm-rf-equivalent-for-windows 谢谢我完全忘记了这些过程。现在可以了,非常感谢! 【参考方案1】:

事实证明我的错误是我忘记在我的 AppKernel 文件中的“供应商”中添加远程包/包。

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

【讨论】:

【参考方案2】:

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

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

Bundle 中的自定义映射实体

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/ 目录中的文件应用更改后,请务必清除缓存目录。

如 cmets 中所述: 您需要暂时停止任何可能正在使用 prod 目录的 PHP 进程(即,如果您已经运行了 console server:run)并重试。如果还是不行,试试this

【讨论】:

由于我的 Entity 位于 Entity 目录中并且我使用注释,我可以只使用 auto_mapping,因为我的配置不在其他地方,对吗? 是的,这样应该可以正常工作。我在App/MyBundle/Entity/EntityName 中有我的实体,在配置中我有auto_mapping: true - 就像一个魅力。不过,您仍然需要在应用更改后清除缓存。 是的,我现在就这样离开了,现在我清除了缓存(在关闭所有 php 进程后)它就像一个魅力。您能否在答案中添加您必须关闭所有进程以清除生产缓存?那么我可以接受你的回答。

以上是关于Symfony2 - 在链配置的命名空间中找不到类“X”的主要内容,如果未能解决你的问题,请参考以下文章

在链配置的命名空间 App\Entity [Symfony 5.3][PHPUnit 8.5] 中找不到类 Mock_*

Zend Framework 2 + Doctrine ODM,“在链配置的命名空间中找不到类”错误?

更改命名空间时在 Laravel 中找不到类“\App\User”

在命名空间/头文件中找不到类

Doctrine2 ManyToMany 自引用

symfony2:试图从命名空间加载类“Memcache”