Symfony2 - 在链配置的命名空间中找不到类“X”
Posted
技术标签:
【中文标题】Symfony2 - 在链配置的命名空间中找不到类“X”【英文标题】:Symfony2 - The class 'X' was not found in the chain configured namespaces 【发布时间】:2015-11-12 20:08:03 【问题描述】:我一直在寻找解决问题的方法。但我找不到任何解决方案。
当我尝试打开主页时,总是收到此错误消息:
未捕获的异常 'Doctrine\Common\Persistence\Mapping\MappingException' 带有消息 'The class 'Test\Bundle\UserBundle\Entity\User' is not found in the chain configured namespaces' in...强>
奇怪的是,我只有在我有以下 URL 时才能得到它:
http://localhost/
但是当我在这个 URL 上运行它时,我没有收到任何错误,并且我的页面正在正确显示:
http://localhost/app_dev.php
我的配置看起来像这样(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
我在我的自定义服务中这样调用 Doctrine:
public function __construct(EntityManager $em)
$repositiory = $em->getRepository('Test\Bundle\UserBundle\Entity\User');
$this->user = $repositiory->find($_SERVER['AUTH_USER']);
我的 Symfony 应用程序正在 IIS Web 服务器上运行。
你们知道我哪里做错了吗?
【问题讨论】:
你做了php app/console cache:clear --env=prod
吗?
我试图这样做,但我得到一个错误,我无法重命名缓存目录“prod”
然后进入目录app/cache/prod
,删除该目录下的所有内容。
您需要暂时停止任何可能正在使用prod
目录的PHP 进程(即,如果您已运行console server:run
)并重试。如果还是不行,试试***.com/questions/97875/rm-rf-equivalent-for-windows
谢谢我完全忘记了这些过程。现在可以了,非常感谢!
【参考方案1】:
事实证明我的错误是我忘记在我的 AppKernel 文件中的“供应商”中添加远程包/包。
它们没有在“registerBundles”函数中注册。
【讨论】:
【参考方案2】:映射名称是TestUserBundle
,但路径是Test\Bundle\User\Bundle
,不应该改名为TestBundleUserBundle
吗?此外,通常mappings
和auto_generate_proxy_classes
在开发模式下设置为true
,这可能解释了为什么它在那里工作而不是生产。
您可能想查看documentation (Symfony 2.7),它显示了您应该如何根据您的具体情况配置映射。
Bundle 中的自定义映射实体
doctrine:
# ...
orm:
# ...
auto_mapping: true
mappings:
# ...
AppBundle:
type: xml
dir: SomeResources/config/doctrine
映射包外的实体
doctrine:
# ...
orm:
# ...
mappings:
# ...
SomeEntityNamespace:
type: annotation
dir: "%kernel.root_dir%/../src/Entity"
is_bundle: false
prefix: App\Entity
alias: App
最后但并非最不重要的一点是,在对config.yml
或app/config/
目录中的文件应用更改后,请务必清除缓存目录。
如 cmets 中所述: 您需要暂时停止任何可能正在使用 prod 目录的 PHP 进程(即,如果您已经运行了 console server:run)并重试。如果还是不行,试试this
【讨论】:
由于我的 Entity 位于 Entity 目录中并且我使用注释,我可以只使用 auto_mapping,因为我的配置不在其他地方,对吗? 是的,这样应该可以正常工作。我在App/MyBundle/Entity/EntityName
中有我的实体,在配置中我有auto_mapping: true
- 就像一个魅力。不过,您仍然需要在应用更改后清除缓存。
是的,我现在就这样离开了,现在我清除了缓存(在关闭所有 php 进程后)它就像一个魅力。您能否在答案中添加您必须关闭所有进程以清除生产缓存?那么我可以接受你的回答。以上是关于Symfony2 - 在链配置的命名空间中找不到类“X”的主要内容,如果未能解决你的问题,请参考以下文章
在链配置的命名空间 App\Entity [Symfony 5.3][PHPUnit 8.5] 中找不到类 Mock_*
Zend Framework 2 + Doctrine ODM,“在链配置的命名空间中找不到类”错误?