Symfony错误在链配置的命名空间XXX中找不到类XXX

时间:2014-04-02 13:39:44

标签: php symfony doctrine

关于这个问题还有其他一些问题,但没有一个真的有用。我是Symfony的新手,所以我很难理解它。

我在Client \ IntranetBundle \ LDAP \ LDAPAuthenticationProvider.php文件中,此代码导致错误:

$user = new LDAPUser($username);

我确实添加了它的命名空间:

use Client\IntranetBundle\LDAP\LDAPUser;

LDAPUser实现UserInterface

我得到的错误是

The class 'Client\IntranetBundle\LDAP\LDAPUser' was not found in the chain
configured namespaces Client\ClientBundle\Entity

这是什么意思?根据我的阅读,它与映射有关。

config.yml中的My Doctrine orm设置为:

 orm:
    auto_generate_proxy_classes: %kernel.debug%
    auto_mapping: true

希望你能帮助我。

编辑#1

实际上,我发现它不是

$user = new LDAPUser($username);

这导致了错误,但是当我试图坚持这个实体的时候:

$entityManager->persist($user);

编辑#2:

我对映射的错误感到困惑:

<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">

<entity name="Client\IntranetBundle\LDAP\LDAPUser" table="users" repository-class="Client\ClientBundle\Repository\UserRepository">
    <id name="id" type="integer" column="id">
        <generator strategy="AUTO" />
    </id>
    <field name="username" column="username" type="string" length="100" />
</entity>

也许是因为我在两个捆绑包之间跳跃?

3 个答案:

答案 0 :(得分:33)

默认情况下,auto_mapping功能会查找Entity命名空间下的实体,因此假设您的实体不存在,Doctrine对此一无所知。

您需要将您的实体放在Entity命名空间下,或手动配置Doctrine以添加您的自定义实体命名空间。这样您就失去了auto_mapping功能,因此您需要手动注册每个包:

orm:
    auto_generate_proxy_classes: %kernel.debug%
    entity_managers:
        default:
            mappings:
                MyBundle:
                    type: annotation
                custom_mapping:
                    type: annotation
                    prefix: Client\IntranetBundle\LDAP\
                    dir: "%kernel.root_dir%/src/Client/IntranetBundle/LDAP/"
                    is_bundle: false

正如您所看到的,最好将所有内容放在捆绑包中的Entity命名空间下,然后让Doctrine付出艰苦的努力。

答案 1 :(得分:0)

只是为了帮助更多人。我一直在寻找所有地方来修复我的项目中的错误。

事实证明,我的错误是忘记在我的AppKernel文件中的“vendor”中添加远程捆绑/捆绑包。

它们未在“registerBundles”功能中注册。

我希望这个可以帮助你们所有人!

答案 2 :(得分:0)

您的捆绑包应与config/packages/doctrine.yaml(Symfony4)配置文件中用于服务/命令/ api的正确实体管理器进行映射。

例如,在以下原则配置中,BundleNamedefault实体管理器映射,因此使用default实体管理器原则连接的代码可以访问和使用BundleName的实体,并且存储库。

orm:
    entity_managers:
        default:
            mappings:
              BundleName: