Производственная среда Symfony2: Исключение сопоставления из-за пользовательского класса пользователя, не найденного в конфигурации цепочки


Я разрабатываю немного сложное приложение на основе Symfony2.1 с подключением к двум разным базам данных (с двумя менеджерами сущностей, один из которых подключен к Oracle, а другой - к PostgreSQL) и пользовательским пользовательским классом (с пользовательским кодировщиком паролей).

Мне удалось правильно запустить его в среде разработки, но всякий раз, когда я пытаюсь запустить его в производственной среде, я получаю следующую ошибку:

Доктрина\Общее\Постоянство\Сопоставление\Исключение сопоставления: Класс "Myfirm\Usermanagerbundle\Сущность\Пользователь" не найден в цепочке настроенных пространств имен (неперехваченное исключение)

Моя безопасность и кодеры в 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 

Раздел doctrine.orm в app/config/config.yml:

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

У кого-нибудь есть какие-нибудь зацепки? Большое спасибо.

Author: DaveFX, 2012-10-10

2 answers

Проблема, похоже, заключается в ошибке в Symfony2: менеджер сущностей по умолчанию должен называться "по умолчанию", если вы хотите, чтобы он работал в производственной среде в качестве менеджера сущностей по умолчанию.

После изменения раздела doctrine.orm в app/config/config.yml на:

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:  ~

Все работает.

 2
Author: DaveFX, 2012-10-11 07:45:41

ХОРОШО. Наконец, после слишком долгого времени я нашел решение для этого: вы должны добавить имя менеджера сущностей в определение безопасности с параметром имя_менеджера:

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
 0
Author: DaveFX, 2014-09-16 10:50:30