Ошибка 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".
Я надеюсь, что это поможет всем вам!