Ошибка Symfony Класс XXX не найден в цепочках имен XXX

Есть еще несколько вопросов по этому вопросу, но ни один из них не был действительно полезен. Я новичок в 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

Что это значит? Из того, что я прочитал, он имеет какое-то отношение к отображению.

У меня есть orm в 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>

Может быть, потому что я прыгаю между двумя пучками?

Ответ 1

По умолчанию функция 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 выполнять тяжелую работу.

Ответ 2

просто чтобы помочь вам. Я искал повсюду, чтобы исправить эту ошибку в моем проекте.

Оказывается, моя ошибка заключалась в том, что я забыл добавлять удаленные пакеты/пакеты в "vendor" внутри моего файла AppKernel.

Они не были зарегистрированы в функции "registerBundles".

Я надеюсь, что это поможет всем вам!