112 votes

"La classe XXX n'est pas une entité valide ou une super classe mappée" après avoir déplacé la classe dans le système de fichiers.

J'avais une classe d'entité dans Aib \PlatformBundle\Entity\User.php

Je n'ai eu aucun problème à créer sa classe de formulaire par l'intermédiaire de

php app/ console doctrine:generate:form AibPlatformBundle:User

J'ai maintenant changé l'espace de noms en Aib \PlatformBundle\Entity\Identity\User mais lorsque j'essaie de générer le formulaire avec la tâche que j'ai indiquée précédemment il dit :

"Classe Aib \PlatformBundle\Entity\User n'est pas une entité valide mappée".

Il s'agit du contenu du fichier :

<?php
namespace Aib\PlatformBundle\Entity\Identity;

use Doctrine\ORM\Mapping as ORM;

    /**
     * Aib\PlatformBundle\Entity\Identity\User
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="Aib\PlatformBundle\Entity\Identity
    \UserRepository")
     */
    class User
    {
    ...

Une idée ?

symfony2.0.4

267voto

Mike Points 801

J'ai eu ce problème - n'oubliez pas l'annotation * @ORM\Entity comme ci-dessous :

/**
 * Powma\ServiceBundle\Entity\User
 *
 * @ORM\Entity
 * @ORM\Table(name="users")
 */

17voto

mogoman Points 1129

J'ai eu ce problème hier et j'ai trouvé ce fil de discussion. J'ai créé l'entité avec le mapping dans un nouveau bundle (par exemple MyFooBundle/Entity/User.php), j'ai fait toute la configuration selon les docs mais j'ai obtenu la même erreur que ci-dessus en essayant de charger l'application.

Finalement, je me suis rendu compte que je ne chargeais pas MyFooBundle dans AppKernel :

new My\FooBundle\MyFooBundle()

Un bon moyen de déboguer ce problème est d'exécuter la commande suivante :

app/console doctrine:mapping:info

13voto

Mark Fu Points 320

Vérifiez votre fichier config.yml, il doit contenir quelque chose comme ceci :

# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8
        types:
            json: Sonata\Doctrine\Types\JsonType

    orm:
        auto_generate_proxy_classes: %kernel.debug%
        # auto_mapping: true
        entity_managers:
            default:
                mappings:
                    FOSUserBundle: ~
                    # ApplicationSonataUserBundle: ~
                    YourUserBundle: ~
                    SonataUserBundle: ~

Ajoutez votre propre liasse à la liste des correspondances.

12voto

gruentee Points 303

J'ai résolu ce problème en paramétrant $useSimpleAnnotationReader=false lors de la création du MetaDataConfiguration .

11voto

wucdbm Points 101

J'ai résolu ce problème en passant false en tant que deuxième paramètre de Doctrine\ORM\Configuration::newDefaultAnnotationDriver .

Il m'a fallu un certain temps de recherche sur Google et dans le code source.

Mon cas était un peu particulier puisque j'utilisais un mapping pointant vers un autre répertoire non lié à l'installation de Symfony et que je devais également utiliser du code ancien.

J'avais remanié des entités héritées et elles ont cessé de fonctionner. Elles utilisaient @Annotation au lieu de @ORM\Annotation Après avoir été remanié, il n'a donc pas réussi à lire les métadonnées. En n'utilisant pas un simple lecteur d'annotations, tout semble aller pour le mieux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X