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

9voto

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

9voto

MediaVince Points 66

Grand merci à Mark Fu et mogoman

Je savais qu'il devait se trouver quelque part dans le fichier config.yml... et le fait de pouvoir le tester par rapport au fichier

app/console doctrine:mapping:info

a vraiment aidé !

En fait, cette commande s'arrête simplement en cas d'erreur... pas de retour d'information, mais lorsque tout va bien, vous devriez pouvoir voir toutes vos entités listées.

3voto

Detroitteatime Points 582

J'ai résolu la même exception en supprimant un fichier orm.php autogénéré conflictuel dans le dossier Resources/config/doctrine de l'offre groupée ; selon la documentation : "Un ensemble ne peut accepter qu'un seul format de définition des métadonnées. Par exemple, il n'est pas possible de mélanger des définitions de métadonnées YAML avec des définitions de classes d'entités PHP annotées."

1voto

Il est très probable que vous ayez PHP 5.3.16 (Symfony 2.x ne fonctionnera pas avec). Quoi qu'il en soit, vous devriez charger la page de vérification sur http://you.site.name/config.php Si le projet n'a 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 !

1voto

przemo_li Points 1284
  1. L'entité doit avoir les annotations Entity et Table appropriées (l'ordre peut avoir de l'importance, essayez donc les deux).
  2. S'il y a un dépôt personnalisé, il DOIT être accessible via la classe d'entité elle-même ($entityManager->getRepository('your ENTITY class name')), car l'appeler via le nom de la classe de dépôt trompera Doctrine en lui faisant croire que la classe Repo doit être une entité elle-même. C'est idiot, mais Doctrine ne fait pas cette distinction.

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