web-dev-qa-db-fra.com

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

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

Je n’ai eu aucun problème à essayer de créer sa classe de forme à travers

app doctrine/console php: générer: formulaire AibPlatformBundle: utilisateur

Maintenant, j'ai changé l'espace de nom en Aib\PlatformBundle\Entity\Identity\User, mais lorsque j'essaie de générer le formulaire avec la tâche que j'ai précédemment décrite, il indique:

"La classe Aib\PlatformBundle\Entity\User n'est pas une entité valide ni une super classe mappée."

Ceci est le 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

83
ziiweb

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

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

Avait ce problème hier et a trouvé ce fil. J'ai créé l'entité avec le mappage dans un nouvel ensemble (par exemple, MyFooBundle/Entity/User.php), ai effectué toute la configuration en fonction de la documentation, mais j'ai obtenu la même erreur que ci-dessus lors de la tentative de chargement de l'application.

Finalement, j'ai réalisé que je ne chargeais pas MyFooBundle dans AppKernel:

new My\FooBundle\MyFooBundle()

Un excellent moyen de résoudre ce problème consiste à exécuter cette commande:

app/console doctrine:mapping:info
15
mogoman

Vérifiez votre fichier config.yml, devrait 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 lot à la liste des mappages.

13
Mark Fu

Dans mon cas, le problème a été résolu en changeant le cache de mes serveurs de eAccelerator à APC . Apparemment, eAccelerator supprime tous les commentaires des fichiers, ce qui casse vos annotations.

7
Christian Vermeulen

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

7
gruentee

J'ai résolu ceci en passant false comme second paramètre à Doctrine\ORM\Configuration::newDefaultAnnotationDriver.

Il m'a fallu un moment pour fouiller dans Google et le code source.

Mon cas était un peu spécial puisque j'utilisais un mappage pointant vers un autre répertoire non lié à l'installation de Symfony, car je devais également utiliser du code hérité.

J'avais refactorisé des entités héritées et elles ont cessé de fonctionner. Ils avaient l'habitude d'utiliser @Annotation au lieu de @ORM\Annotation, donc après le refactoring, il a simplement échoué à lire les métadonnées. En n'utilisant pas un simple lecteur d'annotation, tout semble aller pour le mieux.

7
wucdbm

grand merci à Mark Fu et mogoman

Je savais que ça devait être quelque part dans config.yml ... et pouvoir le tester contre la

app/console doctrine:mapping:info

vraiment aidé!

En fait, cette commande s'arrête simplement à une erreur ... pas de retour, mais quand tout va bien, vous devriez pouvoir voir toutes vos entités listées.

6
MediaVince

J'ai résolu la même exception en supprimant un fichier orm.php généré automatiquement et en conflit dans le dossier Resources/config/doctrine du bundle; Selon la documentation: "Un groupe ne peut accepter qu'un seul format de définition de métadonnées. Par exemple, il n'est pas possible de mélanger les définitions de métadonnées YAML avec des définitions annotées PHP)."

3
Cartesian Theater

Très grande possibilité que vous ayez PHP 5.3.16 (Symfony 2.x ne fonctionnera pas avec cela). Quoi qu'il en soit, vous devez charger la page de contrôle sur http://votre site. name/config.php Si votre projet n'avait pas fonctionné sur le serveur d'hébergement, les lignes suivantes doivent être supprimées dans "config.php":

if (!in_array(@$_SERVER['REMOTE_ADDR'], array(
    '127.0.0.1',
    '::1',
))) {
    header('HTTP/1.0 403 Forbidden');
    exit('This script is only accessible from localhost.');
}

Bonne chance!

1

Dans mon cas, j’étais trop zélé lors d’un refactor et j’avais supprimé un fichier doctrine yml!

0
jhchnc