"Klasse XXX ist keine gültige Entität oder zugeordnete Superklasse" nach dem Verschieben der Klasse im Dateisystem


90

Ich hatte eine Entitätsklasse in Aib \ PlatformBundle \ Entity \ User.php

Ich hatte keine Probleme beim Versuch, die Formularklasse zu erstellen

PHP App / Konsole Doktrin: generieren: Formular AibPlatformBundle: Benutzer

Jetzt habe ich den Namespace in Aib \ PlatformBundle \ Entity \ Identity \ User geändert, aber wenn ich versuche, das Formular mit der Aufgabe zu generieren, die ich zuvor gesagt habe:

"Klasse Aib \ PlatformBundle \ Entity \ User ist keine gültige Entität oder zugeordnete Superklasse."

Dies ist der Dateiinhalt:

<?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
    {
    ...

Irgendeine Idee?

symfony2.0.4


Haben Sie Klassen, die User erweitern und für die Sie vergessen haben, Namespaces zu aktualisieren?
Problematisch

3
Soweit ich weiß, ist es nicht möglich, Subnamespaces für Ihre Entitäten zu definieren, da Symfony immer versucht, AibPlatformBundle: User in Aim \ PlatformBundle \ Entity \ User aufzulösen , unabhängig von seinem Namespace.
Alessandro Desantis

Antworten:


226

Hatte dieses Problem - vergessen Sie nicht die Anmerkung * @ORM\Entitywie unten:

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

7
Danke dir! :) Hat mir viel Zeit gespart!
Faery

2
Ich kann nicht glauben, dass das so weit unten ist! Ich kann nicht glauben, dass mir dieser Fehler passiert ist, aber gut !! Vielen Dank!
Grafik

Im Ernst, Stunden gespart !! Danke dir.
Anjana Silva

15

Hatte gestern dieses Problem und fand diesen Thread. Ich habe die Entität mit der Zuordnung in einem neuen Bundle erstellt (z. B. MyFooBundle / Entity / User.php), die gesamte Konfiguration gemäß den Dokumenten vorgenommen, aber beim Laden der App den gleichen Fehler von oben erhalten.

Am Ende wurde mir klar, dass ich MyFooBundle nicht in AppKernel geladen habe:

new My\FooBundle\MyFooBundle()

Eine gute Möglichkeit, dies zu debuggen, besteht darin, diesen Befehl auszuführen:

app/console doctrine:mapping:info

1
Ah verdammt, es sind oft die einfachsten Dinge, die wir vergessen ... vielen Dank: D
Amadox

13

Überprüfen Sie Ihre config.yml-Datei, die ungefähr Folgendes enthalten sollte:

# 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: ~

Fügen Sie der Zuordnungsliste Ihr eigenes Bundle hinzu.


Prost!! Meine Konfiguration (aus Sonata) hatte nur Zuordnungen: ~, keine Bundles angegeben. Durch manuelles Hinzufügen wurde mein Problem behoben :)
Shousper

9

Ich habe dies gelöst, indem ich falseals zweiten Parameter an übergeben habe Doctrine\ORM\Configuration::newDefaultAnnotationDriver.

Ich habe eine Weile gebraucht, um Google und den Quellcode zu durchsuchen.

Mein Fall war etwas Besonderes, da ich eine Zuordnung verwendete, die auf ein anderes Verzeichnis verweist, das nicht mit der Symfony-Installation zusammenhängt, da ich auch Legacy-Code verwenden musste.

Ich hatte ältere Unternehmen überarbeitet und sie hörten auf zu arbeiten. Früher wurde @Annotationanstelle von verwendet @ORM\Annotation, sodass nach dem Refactoring die Metadaten einfach nicht gelesen werden konnten. Wenn Sie keinen einfachen Anmerkungsleser verwenden, scheint alles in Ordnung zu sein.


8

In meinem Fall wurde das Problem gelöst, indem der Cache meines Servers von eAccelerator auf APC geändert wurde . Anscheinend entfernt eAccelerator alle Kommentare aus Dateien, wodurch Ihre Anmerkungen beschädigt werden.


Opcache hat eine Einstellung, um das Entfernen von Kommentaren zu deaktivieren opcache.save_comments=1. Vielleicht gibt es auch eine für eAccelerator / APC?
Oylex

8

Ich habe dieses Problem durch Festlegen $useSimpleAnnotationReader=falsebeim Erstellen des behoben MetaDataConfiguration.


6

Vielen Dank an Mark Fu und Mogoman

Ich wusste, dass es irgendwo in der config.yml sein musste ... und es gegen die testen konnte

app/console doctrine:mapping:info

wirklich geholfen!

Tatsächlich stoppt dieser Befehl einfach bei einem Fehler ... keine Rückmeldung, aber wenn alles in Ordnung ist, sollten Sie alle Ihre Entitäten aufgelistet sehen können.


3

Ich habe dieselbe Ausnahme behoben, indem ich eine widersprüchliche automatisch generierte orm.php-Datei im Ordner Resources / config / doi des Bundles gelöscht habe. In der Dokumentation heißt es: "Ein Bundle kann nur ein Metadatendefinitionsformat akzeptieren. Beispielsweise ist es nicht möglich, YAML-Metadatendefinitionen mit kommentierten PHP-Entitätsklassendefinitionen zu mischen."


Danke dir. Du hast mir viel Zeit gespart. Ich habe diesen Fehler nach dem Erstellen einer Entität im PHP-Format erhalten, sie dann gelöscht und eine neue kommentierte Entität mit demselben Namen erstellt.
iMx

1

Sehr hohe Wahrscheinlichkeit, dass Sie PHP 5.3.16 haben (Symfony 2.x funktioniert nicht damit). Auf jeden Fall sollten Sie die Überprüfungsseite auf http://you.site.name/config.php laden. Wenn Ihr Projekt nicht auf dem Hosting-Server funktioniert hat, müssen die nächsten Zeilen in "config.php" entfernt werden:

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.');
}

Viel Glück!


0

In meinem Fall war ich während eines Refaktors zu eifrig und hatte eine Doktrin-Yml-Datei gelöscht!


0

In meinem Fall auf meinem Mac habe ich src / MainBundle / Resource / Config / Doctrine verwendet. Natürlich hat es auf dem Mac funktioniert, aber auf dem Ubuntu-Produktionsserver nicht. Nach der Umbenennung in Config to config und Doctrine to Doctrine wurden die Zuordnungsdateien gefunden und es begann zu funktionieren.


-1

Ich habe die gleiche Fehlermeldung wie in Ihrem Fall beseitigt, indem ich app / console_dev anstelle von nur app / console verwendet habe

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.