Php Symfony2生产环境:由于在链配置中找不到自定义用户类而导致映射异常

Php Symfony2生产环境:由于在链配置中找不到自定义用户类而导致映射异常,php,symfony,doctrine-orm,symfony-2.1,Php,Symfony,Doctrine Orm,Symfony 2.1,我正在开发一个有点复杂的基于Symfony2.1的应用程序,它连接到两个不同的数据库(两个实体管理器,一个连接到Oracle,另一个连接到PostgreSQL)和一个自定义用户类(带有自定义密码编码器) 我已经设法让它在dev环境中正确运行,但每当我尝试在生产环境中运行它时,就会出现下一个错误: 条令\Common\Persistence\Mapping\MappingException:在链配置的名称空间中找不到类“MyFirm\UserManagerBundle\Entity\User”(未

我正在开发一个有点复杂的基于Symfony2.1的应用程序,它连接到两个不同的数据库(两个实体管理器,一个连接到Oracle,另一个连接到PostgreSQL)和一个自定义用户类(带有自定义密码编码器)

我已经设法让它在dev环境中正确运行,但每当我尝试在生产环境中运行它时,就会出现下一个错误:

条令\Common\Persistence\Mapping\MappingException:在链配置的名称空间中找不到类“MyFirm\UserManagerBundle\Entity\User”(未捕获异常)

app/config/security.yml中的我的安全和编码器:

security:
  encoders:
    MyFirm\UserManagerBundle\Entity\User:
        id: myfirm_usermanager.password_encoder

  providers:
    user_db:
        entity: 
            class: MyFirm\UserManagerBundle\Entity\User
            property: username 
app/config/config.yml中的doctrine.orm部分:

doctrine:
  orm:
    auto_generate_proxy_classes: %kernel.debug%
    default_entity_manager: user_config_db 
    entity_managers:
        event_db:
            connection:   event_db
            mappings:
                MyFirmEventManagerBundle: ~
        user_config_db:
            connection:   user_config_db
            mappings:
                MyFirmUserManagerBundle:  ~
最后,这是最终的异常日志:

Exception trace:
 () at C:\SF2_project\vendor\doctrine\common\lib\Doctrine\Common\Persistence\Mapping\MappingException.php:38
 Doctrine\Common\Persistence\Mapping\MappingException::classNotFoundInNamespaces() at C:\SF2_project\vendor\doctrine\common\lib\Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain.php:114
 Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain->loadMetadataForClass() at C:\SF2_project\vendor\doctrine\orm\lib\Doctrine\ORM\Mapping\ClassMetadataFactory.php:112
 Doctrine\ORM\Mapping\ClassMetadataFactory->doLoadMetadata() at C:\SF2_project\vendor\doctrine\common\lib\Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory.php:302
 Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->loadMetadata() at C:\SF2_project\vendor\doctrine\common\lib\Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory.php:205
 Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getMetadataFor() at C:\SF2_project\vendor\doctrine\orm\lib\Doctrine\ORM\EntityManager.php:268
 Doctrine\ORM\EntityManager->getClassMetadata() at C:\SF2_project\app\cache\prod\jms_diextra\doctrine\EntityManager_5075a0dd6e27a.php:345
 EntityManager5075a0dd6e27a_546a8d27f194334ee012bfe64f629947b07e4919\__CG__\Doctrine\ORM\EntityManager->getClassMetadata() at C:\SF2_project\vendor\symfony\symfony\src\Symfony\Bridge\Doctrine\Security\User\EntityUserProvider.php:39
 Symfony\Bridge\Doctrine\Security\User\EntityUserProvider->__construct() at C:\SF2_project\app\cache\prod\appProdProjectContainer.php:1132
 appProdProjectContainer->getSecurity_User_Provider_Concrete_UserDbService() at C:\SF2_project\app\bootstrap.php.cache:211
 Symfony\Component\DependencyInjection\Container->get() at C:\SF2_project\app\cache\prod\appProdProjectContainer.php:1121
 appProdProjectContainer->getSecurity_User_Provider_Concrete_ChainProviderService() at C:\SF2_project\app\bootstrap.php.cache:211
 Symfony\Component\DependencyInjection\Container->get() at C:\SF2_project\app\cache\prod\appProdProjectContainer.php:1105
 appProdProjectContainer->getSecurity_Authentication_ManagerService() at C:\SF2_project\app\bootstrap.php.cache:211
 Symfony\Component\DependencyInjection\Container->get() at C:\SF2_project\app\cache\prod\appProdProjectContainer.php:552
 appProdProjectContainer->getSecurity_ContextService() at C:\SF2_project\app\bootstrap.php.cache:211
 Symfony\Component\DependencyInjection\Container->get() at C:\SF2_project\app\cache\prod\appProdProjectContainer.php:1002
 appProdProjectContainer->getTwigService() at C:\SF2_project\app\bootstrap.php.cache:211
 Symfony\Component\DependencyInjection\Container->get() at C:\SF2_project\app\cache\prod\appProdProjectContainer.php:30
 appProdProjectContainer->getAssetic_AssetManagerService() at C:\SF2_project\app\bootstrap.php.cache:211
 Symfony\Component\DependencyInjection\Container->get() at C:\SF2_project\vendor\symfony\assetic-bundle\Symfony\Bundle\AsseticBundle\CacheWarmer\AssetManagerCacheWarmer.php:33
 Symfony\Bundle\AsseticBundle\CacheWarmer\AssetManagerCacheWarmer->warmUp() at C:\SF2_project\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerAggregate.php:47
 Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerAggregate->warmUp() at C:\SF2_project\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Command\CacheWarmupCommand.php:64
 Symfony\Bundle\FrameworkBundle\Command\CacheWarmupCommand->execute() at C:\SF2_project\vendor\symfony\symfony\src\Symfony\Component\Console\Command\Command.php:238
 Symfony\Component\Console\Command\Command->run() at C:\SF2_project\vendor\symfony\symfony\src\Symfony\Component\Console\Application.php:193
 Symfony\Component\Console\Application->doRun() at C:\SF2_project\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Console\Application.php:78
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at C:\SF2_project\vendor\symfony\symfony\src\Symfony\Component\Console\Application.php:106
 Symfony\Component\Console\Application->run() at C:\SF2_project\app\console:22

有人有线索吗?非常感谢。

问题似乎是Symfony2中的一个bug:如果您希望默认实体管理器作为默认实体管理器在生产环境中工作,则必须将其命名为“default”

将app/config/config.yml中的doctor.orm部分更改为:

doctrine:
  orm:
    auto_generate_proxy_classes: %kernel.debug%
    default_entity_manager: default
    entity_managers:
      event_db:
        connection:   event_db
        mappings:
            MyFirmEventManagerBundle: ~
      default:
        connection:   user_config_db
        mappings:
            MyFirmUserManagerBundle:  ~

一切正常

好的。最后,经过太多时间,我找到了解决方案:您必须使用manager\u name选项将实体管理器名称添加到安全定义中:

security: encoders: MyFirm\UserManagerBundle\Entity\User: id: myfirm_usermanager.password_encoder providers: user_db: entity: class: MyFirm\UserManagerBundle\Entity\User property: username manager_name: user_config_db 安全: 编码器: MyFirm\UserManagerBundle\Entity\User: id:myfirm\u usermanager.password\u编码器 供应商: 用户数据库: 实体: 类别:MyFirm\UserManagerBundle\Entity\User 属性:用户名 管理员名称:用户配置数据库
顺便说一句,我已经做完了。有人也有这个问题吗?在Symfony列表中,他们无法复制它…太好了。也许可以试着自己复制,在不同的机器上?它可能是特定于您的OS或PHP版本的。也可以禁用您拥有的任何加速器,并检查它是否显示在CLI以及浏览器中。当我出现此错误时,是因为我没有添加新的捆绑包(出错的捆绑包)到config.yml中的映射-如果您有gedmo扩展,则需要这样做。最后,我发现这不是错误:请看另一个答案