Symfony2 ambiente di produzione: Mappatura eccezione a causa della classe Utente personalizzata non si trovano nelle catene di configurazione

Sto sviluppando un po ‘ più complessa di Symfony2.1 base di app, con collegamento a due database diversi (con due gestori di entità, l’una collegata ad Oracle e altri per PostgreSQL) e una classe Utente personalizzata (con una password personalizzata encoder).

Sono riuscito ad avere la corretta esecuzione in ambiente dev, ma ogni volta che provo ad eseguire in ambiente di produzione ricevo l’errore successivo:

Doctrine\Common\Persistenza\Mappatura\MappingException: Il classe ‘MyFirm\UserManagerBundle\Entity\User” non è stato trovato nella catena configurato spazi dei nomi (uncaught exception)

La mia sicurezza e encoder in 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 

La dottrina.orm sezione in 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:  ~

E, infine, questo è l’ultimo log Eccezioni:

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

Qualcuno ha qualche idea? Grazie mille.

InformationsquelleAutor DaveFX | 2012-10-10

 

2 Replies
  1. 2

    Il problema sembra che sia un bug di Symfony2: l’entity manager predefinito deve essere denominato “default”, se si desidera lavorare in ambiente di Produzione, come il gestore di entità default.

    Dopo aver cambiato la dottrina.orm sezione in app/config/config.yml per:

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

    tutto funziona.

    • +1. Non dimenticare di segnalare la cosa al team.
    • Ho già fatto: https://github.com/symfony/symfony/issues/5724
    • A proposito. Qualcuno ha questo problema? In Symfony elenco non può riprodurre…
    • Grande. Forse tentare di riprodurre da soli, su una macchina diversa? Potrebbe essere particolare per il tuo OS o versione di PHP. Forse anche disattivare eventuali acceleratori hai, e verificare se si è esposti alla CLI nonché nel browser.
    • Quando ho ottenuto questo errore, era perché non avevo aggiunto un nuovo bundle (quello che è stato mandare in errore) per il mapping in config.yml – Hai bisogno di fare questo se si ha la gedmo estensioni
    • Finalmente ho trovato non era un errore: guarda l’altra risposta

  2. 0

    OK. Finalmente, dopo tanto tempo, ho trovato la soluzione per questo: si deve aggiungere l’ente nome del responsabile per la sicurezza di definizione con il nome_gestore opzione:

    di sicurezza: 
    encoder: 
    MyFirm\UserManagerBundle\Entity\User: 
    id: myfirm_usermanager.password_encoder 
    
    fornitori: 
    user_db: 
    entità: 
    classe: MyFirm\UserManagerBundle\Entity\User 
    proprietà: nome utente 
    nome_gestore: user_config_db 
    

Lascia un commento