web-dev-qa-db-fra.com

Erreur Symfony La classe XXX n'a ​​pas été trouvée dans les espaces de noms configurés de la chaîne XXX

Il y a déjà d'autres questions sur ce sujet, mais aucune d'entre elles n'a été vraiment utile. Je suis nouveau sur Symfony, il est donc difficile de comprendre. 

Je suis dans le fichier Client\IntranetBundle\LDAP\LDAPAuthenticationProvider.php et ce code provoque une erreur:

$user = new LDAPUser($username);

J'ai ajouté son espace de noms qui est:

use Client\IntranetBundle\LDAP\LDAPUser;

LDAPUser implémente UserInterface

L'erreur que je reçois est 

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

Qu'est-ce que c'est supposé vouloir dire? D'après ce que j'ai lu, cela a quelque chose à voir avec la cartographie.

Ma doctrine dans le fichier config.yml est définie sur:

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

J'espère que vous pourrez m'aider.

EDIT # 1 :

En fait, j'ai découvert que ce n'était pas

$user = new LDAPUser($username);

Cela cause l’erreur, mais c’est quand j’essaie de conserver cette entité:

$entityManager->persist($user);

EDIT # 2:

Je suis confus avec ce qui ne va pas avec la cartographie:

<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>

C'est peut-être parce que je saute entre deux ballots?

16
user1834464

Par défaut, la fonctionnalité auto_mapping recherche des entités sous l'espace de noms Entity. Par conséquent, étant donné que votre entité n'y est pas, Doctrine n'en sait rien.

Vous devez placer votre entité dans l'espace de noms Entity ou configurer Doctrine à la main pour ajouter votre espace de noms d'entité personnalisé. De cette façon, vous perdez la fonctionnalité auto_mapping. Vous devrez donc enregistrer chaque paquet manuellement:

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

Comme vous pouvez le constater, il est préférable de tout placer sous l’espace de noms Entity dans votre paquet et de laisser Doctrine faire le gros du travail.

31

juste pour aider plus de vous. J'ai cherché partout pour corriger cette erreur dans mon projet.

Il s’est avéré que j’ai commis une erreur en oubliant d’ajouter des bundles distants dans "vendor" dans mon fichier AppKernel.

Ils n'étaient pas enregistrés dans la fonction "registerBundles".

J'espère que celui-ci vous aide tous!

0
aneth101