2013-02-26 6 views
27

ich Ausnahme Uncaught exception 'Doctrine\ORM\Mapping\MappingException' with message 'Class "Users" is not a valid entity or mapped super class jedes Mal, wenn ich den nächsten Code auszuführen:Doctrine2 - "Klasse" ist keine gültige Einheit oder kartiert Superklasse

test.php

<?php 
require_once "vendor/autoload.php"; 

use Doctrine\ORM\Tools\Setup; 
use Doctrine\ORM\EntityManager; 

$paths = array(dirname(__FILE__)."/entities"); 
$isDevMode = false; 

// the connection configuration 
$dbParams = array(
    'driver' => 'pdo_mysql', 
    'user'  => 'root', 
    'password' => 'pass', 
    'dbname' => 'snabcentr', 
); 

$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode); 
$em = EntityManager::create($dbParams, $config); 

$user = $em->find("Users", 5); 

Einheiten/Benutzer .php

<?php 
use Doctrine\ORM\Mapping as ORM; 

/** 
* Users 
* 
* @ORM\Table(name="users") 
* @ORM\Entity 
*/ 
class Users 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="email", type="string", length=255, nullable=true) 
    */ 
    private $email; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="password", type="string", length=255, nullable=true) 
    */ 
    private $password; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="type", type="string", nullable=true) 
    */ 
    private $type; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_inn", type="string", length=255, nullable=true) 
    */ 
    private $clientInn; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_ogrn", type="string", length=255, nullable=true) 
    */ 
    private $clientOgrn; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_rs", type="string", length=255, nullable=true) 
    */ 
    private $clientRs; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_ks", type="string", length=255, nullable=true) 
    */ 
    private $clientKs; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_bik", type="string", length=255, nullable=true) 
    */ 
    private $clientBik; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_uaddress", type="string", length=255, nullable=true) 
    */ 
    private $clientUaddress; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_faddress", type="string", length=255, nullable=true) 
    */ 
    private $clientFaddress; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_daddress", type="string", length=255, nullable=true) 
    */ 
    private $clientDaddress; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255, nullable=true) 
    */ 
    private $name; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="notes", type="text", nullable=true) 
    */ 
    private $notes; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="added_date", type="datetime", nullable=true) 
    */ 
    private $addedDate; 


    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set email 
    * 
    * @param string $email 
    * @return Users 
    */ 
    public function setEmail($email) 
    { 
     $this->email = $email; 

     return $this; 
    } 

    /** 
    * Get email 
    * 
    * @return string 
    */ 
    public function getEmail() 
    { 
     return $this->email; 
    } 

    /** 
    * Set password 
    * 
    * @param string $password 
    * @return SnabUsers 
    */ 
    public function setPassword($password) 
    { 
     $this->password = $password; 

     return $this; 
    } 

    /** 
    * Get password 
    * 
    * @return string 
    */ 
    public function getPassword() 
    { 
     return $this->password; 
    } 

    /** 
    * Set type 
    * 
    * @param string $type 
    * @return SnabUsers 
    */ 
    public function setType($type) 
    { 
     $this->type = $type; 

     return $this; 
    } 

    /** 
    * Get type 
    * 
    * @return string 
    */ 
    public function getType() 
    { 
     return $this->type; 
    } 

    /** 
    * Set clientInn 
    * 
    * @param string $clientInn 
    * @return SnabUsers 
    */ 
    public function setClientInn($clientInn) 
    { 
     $this->clientInn = $clientInn; 

     return $this; 
    } 

    /** 
    * Get clientInn 
    * 
    * @return string 
    */ 
    public function getClientInn() 
    { 
     return $this->clientInn; 
    } 

    /** 
    * Set clientOgrn 
    * 
    * @param string $clientOgrn 
    * @return SnabUsers 
    */ 
    public function setClientOgrn($clientOgrn) 
    { 
     $this->clientOgrn = $clientOgrn; 

     return $this; 
    } 

    /** 
    * Get clientOgrn 
    * 
    * @return string 
    */ 
    public function getClientOgrn() 
    { 
     return $this->clientOgrn; 
    } 

    /** 
    * Set clientRs 
    * 
    * @param string $clientRs 
    * @return SnabUsers 
    */ 
    public function setClientRs($clientRs) 
    { 
     $this->clientRs = $clientRs; 

     return $this; 
    } 

    /** 
    * Get clientRs 
    * 
    * @return string 
    */ 
    public function getClientRs() 
    { 
     return $this->clientRs; 
    } 

    /** 
    * Set clientKs 
    * 
    * @param string $clientKs 
    * @return SnabUsers 
    */ 
    public function setClientKs($clientKs) 
    { 
     $this->clientKs = $clientKs; 

     return $this; 
    } 

    /** 
    * Get clientKs 
    * 
    * @return string 
    */ 
    public function getClientKs() 
    { 
     return $this->clientKs; 
    } 

    /** 
    * Set clientBik 
    * 
    * @param string $clientBik 
    * @return SnabUsers 
    */ 
    public function setClientBik($clientBik) 
    { 
     $this->clientBik = $clientBik; 

     return $this; 
    } 

    /** 
    * Get clientBik 
    * 
    * @return string 
    */ 
    public function getClientBik() 
    { 
     return $this->clientBik; 
    } 

    /** 
    * Set clientUaddress 
    * 
    * @param string $clientUaddress 
    * @return SnabUsers 
    */ 
    public function setClientUaddress($clientUaddress) 
    { 
     $this->clientUaddress = $clientUaddress; 

     return $this; 
    } 

    /** 
    * Get clientUaddress 
    * 
    * @return string 
    */ 
    public function getClientUaddress() 
    { 
     return $this->clientUaddress; 
    } 

    /** 
    * Set clientFaddress 
    * 
    * @param string $clientFaddress 
    * @return SnabUsers 
    */ 
    public function setClientFaddress($clientFaddress) 
    { 
     $this->clientFaddress = $clientFaddress; 

     return $this; 
    } 

    /** 
    * Get clientFaddress 
    * 
    * @return string 
    */ 
    public function getClientFaddress() 
    { 
     return $this->clientFaddress; 
    } 

    /** 
    * Set clientDaddress 
    * 
    * @param string $clientDaddress 
    * @return SnabUsers 
    */ 
    public function setClientDaddress($clientDaddress) 
    { 
     $this->clientDaddress = $clientDaddress; 

     return $this; 
    } 

    /** 
    * Get clientDaddress 
    * 
    * @return string 
    */ 
    public function getClientDaddress() 
    { 
     return $this->clientDaddress; 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    * @return SnabUsers 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Set notes 
    * 
    * @param string $notes 
    * @return SnabUsers 
    */ 
    public function setNotes($notes) 
    { 
     $this->notes = $notes; 

     return $this; 
    } 

    /** 
    * Get notes 
    * 
    * @return string 
    */ 
    public function getNotes() 
    { 
     return $this->notes; 
    } 

    /** 
    * Set addedDate 
    * 
    * @param \DateTime $addedDate 
    * @return SnabUsers 
    */ 
    public function setAddedDate($addedDate) 
    { 
     $this->addedDate = $addedDate; 

     return $this; 
    } 

    /** 
    * Get addedDate 
    * 
    * @return \DateTime 
    */ 
    public function getAddedDate() 
    { 
     return $this->addedDate; 
    } 
} 

Haben Sie irgendwelche Ideen warum? eAccelerator ist nicht eingerichtet. Doktrine v 2.2, PHP v 5.3.22, zend engine 2.3.0

+1

Ich denke nicht, dass es in Ordnung sein muss, aber ich habe immer zuerst die "@ORM \ Entity" -Notation, haben Sie das probiert? Haben Sie andere Arbeitseinheiten, die ok laden? Auch nicht verwandt ... Diese Klasse stellt eine einzelne "Benutzer" -Entität dar, daher ist es eine gute Übung, die Einzahl für den Klassennamen (dh Benutzer) zu verwenden. – prodigitalson

+0

das hat nicht geholfen :(. Ich habe mehr Entitäten, aber ich habe das gleiche Problem mit allen von ihnen ... das ist wahrscheinlich ein einfaches Problem, aber ich kann nicht finden, was genau falsch ist – KennyPowers

+0

Ich habe D2 nicht viel verwendet außerhalb von Symfony2 ... registriert 'Setup :: createAnnotationMetadataConfiguration' die Annotationen? – prodigitalson

Antwort

61

Sie verwenden eine Doctrine\Common\Annotations\SimpleAnnotationReader anstelle einer Doctrine\Common\Annotations\AnnotationReader.

Die SimpleAnnotationReader arbeitet mit Standard-Namespaces und liest Anmerkungen im Format @Entity, während die AnnotationReader die importierten Klassen und Namespaces verwenden können (über use statement) und Anmerkungen wie @ORM\Entity.

Sie können mehr darüber auf der documentation lesen.

Hier ist eine feste Version Ihrer test.php

<?php 

use Doctrine\ORM\Tools\Setup; 
use Doctrine\ORM\EntityManager; 
use Doctrine\ORM\Mapping\Driver\AnnotationDriver; 
use Doctrine\Common\Annotations\AnnotationReader; 
use Doctrine\Common\Annotations\AnnotationRegistry; 

require_once __DIR__ . '/vendor/autoload.php'; 
require_once __DIR__ . '/entities/Users.php'; 

$paths   = array(__DIR__ . '/entities'); 
$isDevMode  = false; 
$connectionParams = array(
    'driver' => 'pdo_mysql', 
    'user'  => 'root', 
    'password' => 'pass', 
    'dbname' => 'dbname', 
); 

$config = Setup::createConfiguration($isDevMode); 
$driver = new AnnotationDriver(new AnnotationReader(), $paths); 

// registering noop annotation autoloader - allow all annotations by default 
AnnotationRegistry::registerLoader('class_exists'); 
$config->setMetadataDriverImpl($driver); 

$em = EntityManager::create($connectionParams, $config); 

$user = $em->find('Users', 5); 
+1

es funktioniert! Danke vielmals! – KennyPowers

+9

Doctrine 2.3 Setup :: createAnnotationMetadataConfiguration hat einen fünften Parameter namens $ useSimpleAnnotationReader, den Sie falsch übergeben können, damit es funktioniert! – Malte

+2

Lebensretter. Als jemand, der Doctrine neu kannte, war das sehr hilfreich. –

5

Sie Ihre Konfiguration verwenden können, nur FALSCH bieten einfache Annotation-Reader zu verwenden, so.

<?php 

//same code 

$isSimpleMode = FALSE; 
$proxyDir = null; 
$cache = null; 
$config = Setup::createAnnotationMetadataConfiguration(
$paths, $isDevMode, $proxyDir, $cache, $isSimpleMode 
); 

//same 
?> 
17

In meinem Fall habe ich einfach vergessen @ORM\Entity hinzuzufügen, wie folgt aus:

/** 
* Project\BackendBundle\Entity\Pedido 
* 
* @ORM\Table 
* @ORM\Entity 
* @ORM\HasLifecycleCallbacks 
*/ 
class Pedido 
5

In meinem Fall erhielt ich diesen Fehler, da ich den doc-Block mit /*** statt /** geöffnet:

/*** 
* @entity 
* @table(name="bans") 
*/ 
+1

Und ich hatte '/ *' anstelle von '/ **'. Vielen Dank! – deltab

1

zu Ocramius Antwort verfolgt (die mir auch gespeichert)

Wenn Sie einige benutzerdefinierte Namespacing auf Entities stellen Sie sicher haben, dass die Anmerkungen nach dem Namespace decleration kommen, hier ist mein Wesen, das gearbeitet:

<?php 


namespace App\Models; 

/** 
    * Books 
    * 
    * @ORM\Table(name="books") 
    * @ORM\Entity 
    */ 

    use Doctrine\ORM\Mapping as ORM; 


    class Books 
    { 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=20, nullable=true) 
    */ 
    private $name; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="isbn", type="string", length=20, nullable=true) 
    */ 
    private $isbn; 

Da ist in meinem Controller:

$entityManager->find('App\Models\Books', 1) 

Erfolg !

Verwandte Themen