2015-08-19 12 views
6

Ho cercato per sempre per risolvere il mio problema. Ma non riesco a trovare alcuna soluzione.Symfony2 - La classe 'X' non è stata trovata negli spazi dei nomi chain configurati

ottengo sempre questo messaggio di errore quando si tenta di aprire la home page:

eccezione Uncaught 'Doctrine \ Common \ Persistenza \ Mapping \ MappingException' con il messaggio 'La classe' Test \ Bundle \ UserBundle \ Entity \ utente 'non è stato trovato nella catena configurato spazi dei nomi' in ...

La cosa strana è che io ottenere solo quando devo seguente URL:

http://localhost/

Ma quando l'eseguo su questo URL non ho ricevuto alcun errore e la mia pagina viene visualizzata correttamente:

http://localhost/app_dev.php

La mia configurazione simile a questa (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 

e chiamo Dottrina nel mio servizio personalizzato come questo:

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

My Application Symfony è in esecuzione su un server web IIS.

Sai bene dove ho fatto un errore?

+2

hai fatto un 'php app/console cache: clear --env = prod'? – KhorneHoly

+0

Ho provato a farlo ma ottengo un errore che non riesco a rinominare la directory della cache "prod" – adiii4

+0

Quindi andare nella directory 'app/cache/prod' ed eliminare tutto all'interno di questa directory. – KhorneHoly

risposta

5

Nome di mappatura TestUserBundle ma il percorso è Test\Bundle\User\Bundle, non dovrebbe invece essere denominato TestBundleUserBundle? Inoltre, di solito mappings e auto_generate_proxy_classes sono impostati su true in modalità dev che potrebbe spiegare il motivo per cui funziona e non in prod.

Si potrebbe voler controllare il documentation (Symfony 2.7) che mostra come esattamente si dovrebbe essere la configurazione dei mapping a seconda del caso.

Enti mappatura personalizzata in un fascio

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

Entità Mapping Al di fuori di un bundle

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

Ultimo, ma non meno importante, sempre svuotare la cartella della cache dopo l'applicazione delle modifiche al config.yml oi file in la directory app/config/.

Come menzionato nei commenti: È necessario interrompere temporaneamente qualsiasi processo PHP che potrebbe utilizzare la directory prod (ad esempio, se è stato eseguito il server della console: eseguire) e riprovare. Se non lo fai, prova this

+0

Poiché la mia entità si trova nella directory Entity e utilizzo le annotazioni, potrei usare solo l'auto_mapping perché la mia configurazione non è da qualche altra parte, giusto? – adiii4

+0

Sì, dovrebbe funzionare in questo modo. Ho le mie entità in 'App/MyBundle/Entity/EntityName' e nella configurazione ho' auto_mapping: true' - funziona come un incantesimo. È comunque necessario cancellare la cache dopo aver applicato la modifica. – tftd

+0

Sì, l'ho lasciato in questo modo ora e ho cancellato la cache ora (dopo aver chiuso tutti i processi di php) Funziona come un fascino. Potresti aggiungere alla tua risposta che devi chiudere tutti i processi per svuotare la cache della produzione? Allora posso accettare la tua risposta. – adiii4

0

Si è scoperto che il mio errore è stato che ho dimenticato di aggiungere bundle/bundle distanti in "vendor" all'interno del mio file AppKernel.

Non sono stati registrati nella funzione "registerBundles".

Problemi correlati