Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony错误在链配置的命名空间XXX中找不到类XXX_Php_Symfony_Doctrine - Fatal编程技术网

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

Php Symfony错误在链配置的命名空间XXX中找不到类XXX,php,symfony,doctrine,Php,Symfony,Doctrine,关于这个问题,已经有一些其他的问题了,但是没有一个是真正有用的。我是Symfony的新手,所以很难理解它 我在Client\IntranetBundle\LDAP\ldapaauthenticationprovider.php文件中,此代码导致错误: $user = new LDAPUser($username); 我添加了它的名称空间,即: use Client\IntranetBundle\LDAP\LDAPUser; LDAPUser实现用户界面 我得到的错误是 The class '

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

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

$user = new LDAPUser($username);
我添加了它的名称空间,即:

use Client\IntranetBundle\LDAP\LDAPUser;
LDAPUser实现用户界面

我得到的错误是

The class 'Client\IntranetBundle\LDAP\LDAPUser' was not found in the chain
configured namespaces Client\ClientBundle\Entity
那是什么意思?据我所知,它与映射有关

config.yml中的“我的目标”设置为:

 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>


可能是因为我在两个捆绑包之间跳跃?

默认情况下,
自动映射
功能会在
实体
名称空间下查找实体,因此假设您的实体不在那里,Doctrine对此一无所知

您需要将实体置于
实体
名称空间下,或者手动配置条令以添加自定义实体名称空间。这样,您将失去
自动映射
功能,因此需要手动注册每个捆绑包:

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

如您所见,最好将所有内容都放在捆绑包中的
实体
命名空间下,让Doctrine来完成这项艰巨的工作。

我的错误是,我忘了在
AppKernel
文件中的“供应商”中添加远程捆绑包


它们没有在
registerBundles()
方法中注册。

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

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

orm:
    entity_managers:
        default:
            mappings:
              BundleName:

我懂了!但是为什么它要在另一个包的实体名称空间中查找呢?现在LDAPUser在bundle Client\IntranetBundle中,但错误显示:在链配置的名称空间Client\ClientBundle\Entity中找不到。当抛出类似的异常时,原则将转储所有配置的名称空间,基本上作为调试工具。由于只注册了一个bundle,因此只配置了一个实体名称空间。如果您注册了多个bundle,您应该会看到更多,因为您再次遇到相同的异常。不,我有两个bundle在AppKernel中注册:/。我仍然不明白为什么它会在另一个捆绑包的实体文件夹中查找。啊,但你是对的,我在IntranetBundle中没有任何实体文件夹。你在另一个捆绑包中有实体吗?如果不这样做,Doctrine当然不会向配置的名称空间添加不存在的名称空间。导致错误的持久性(不是新实体实例化)