Symfony2 - 在链配置的命名空间中找不到 class 'X'
Symfony2 - The class 'X' was not found in the chain configured namespaces
我一直在寻找解决我的问题的方法。但是我找不到任何解决方案。
我尝试打开主页时总是收到此错误消息:
未捕获异常 'Doctrine\Common\Persistence\Mapping\MappingException',消息为“class 'Test\Bundle\UserBundle\Entity\User' 未在链配置的名称空间中找到,位于...
奇怪的是我只有在关注 URL:
但是当我 运行 在这个 URL 上时,我没有收到任何错误并且我的页面显示正确:
我的配置如下所示 (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 服务器上运行。
你们知道我哪里出错了吗?
映射名称是TestUserBundle
但是路径是Test\Bundle\User\Bundle
,难道不应该命名为TestBundleUserBundle
吗?此外,通常 mappings
和 auto_generate_proxy_classes
在开发模式下设置为 true
这可能解释了为什么它在那里工作而不是在产品中工作。
您可能想查看 documentation (Symfony 2.7),它显示了您应该如何根据您的情况准确配置映射。
捆绑包中的自定义映射实体
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/
目录中的文件应用更改后始终清除缓存目录。
如评论中所述:
您需要暂时停止任何可能正在使用 prod 目录的 PHP 进程(即,如果您有 运行 控制台 server:run)并重试。如果不行,试试 this
事实证明,我的错误是我忘记在我的 AppKernel 文件中的 "vendor" 中添加 distant bundles/bundles。
它们没有在 "registerBundles" 函数中注册。
我一直在寻找解决我的问题的方法。但是我找不到任何解决方案。
我尝试打开主页时总是收到此错误消息:
未捕获异常 'Doctrine\Common\Persistence\Mapping\MappingException',消息为“class 'Test\Bundle\UserBundle\Entity\User' 未在链配置的名称空间中找到,位于...
奇怪的是我只有在关注 URL:
但是当我 运行 在这个 URL 上时,我没有收到任何错误并且我的页面显示正确:
我的配置如下所示 (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 服务器上运行。
你们知道我哪里出错了吗?
映射名称是TestUserBundle
但是路径是Test\Bundle\User\Bundle
,难道不应该命名为TestBundleUserBundle
吗?此外,通常 mappings
和 auto_generate_proxy_classes
在开发模式下设置为 true
这可能解释了为什么它在那里工作而不是在产品中工作。
您可能想查看 documentation (Symfony 2.7),它显示了您应该如何根据您的情况准确配置映射。
捆绑包中的自定义映射实体
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/
目录中的文件应用更改后始终清除缓存目录。
如评论中所述: 您需要暂时停止任何可能正在使用 prod 目录的 PHP 进程(即,如果您有 运行 控制台 server:run)并重试。如果不行,试试 this
事实证明,我的错误是我忘记在我的 AppKernel 文件中的 "vendor" 中添加 distant bundles/bundles。
它们没有在 "registerBundles" 函数中注册。