Symfony2 - The class 'X' was not found in the chain configured namespaces
Mapping name is TestUserBundle
but the path is Test\Bundle\User\Bundle
, shouldn't it be named TestBundleUserBundle
instead? Also, usually the mappings
and auto_generate_proxy_classes
are set to true
in dev mode which might explain why it's working there and not in prod.
You might want to checkout the documentation (Symfony 2.7) which shows how exactly you should be configuring the mappings depending on your case.
Custom Mapping Entities in a Bundle
doctrine:
# ...
orm:
# ...
auto_mapping: true
mappings:
# ...
AppBundle:
type: xml
dir: SomeResources/config/doctrine
Mapping Entities Outside of a Bundle
doctrine:
# ...
orm:
# ...
mappings:
# ...
SomeEntityNamespace:
type: annotation
dir: "%kernel.root_dir%/../src/Entity"
is_bundle: false
prefix: App\Entity
alias: App
Last, but not least, always clear your cache directory after applying changes to the config.yml
or files in the app/config/
directory.
As mentioned in the comments: You need to temporarily stop any PHP processes that might be using the prod directory (i.e. if you've ran console server:run) and try again. If that doesn't do it, try this
Adrian
Updated on June 04, 2022Comments
-
Adrian almost 2 years
I've been searching forever to solve my problem. But I can't find any solution.
I always get this error message when I try to open the homepage:
Uncaught exception 'Doctrine\Common\Persistence\Mapping\MappingException' with message 'The class 'Test\Bundle\UserBundle\Entity\User' was not found in the chain configured namespaces ' in...
The weird thing is that I only get it when I have following URL:
But when I run it on this URL I don't get any error and my page is being displayed correctly:
My Configuration looks like this (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
And I call Doctrine in my custom service like this:
public function __construct(EntityManager $em) { $repositiory = $em->getRepository('Test\Bundle\UserBundle\Entity\User'); $this->user = $repositiory->find($_SERVER['AUTH_USER']); }
My Symfony Application is running on an IIS Webserver.
Do you guys know where I made a mistake?
-
Adrian over 8 yearsSince my Entity is in the Entity directory and I use annotations I could use just the auto_mapping because my configuration is not somewhere else right?
-
tftd over 8 yearsYes, it should be working fine that way. I have my entities in
App/MyBundle/Entity/EntityName
and in the config I haveauto_mapping: true
- works like a charm. You still need to clear the cache after applying the change, though. -
Adrian over 8 yearsYes I left it like this now and I cleared the cached now (after closing all php processes) It works like a charm. Could you add to your answer that you have to close all processes for clearing the cache of the production? Then I can accept your answer.