Doctrine 2 - pas de classes de métadonnées à traiter par orm: generate-repositories

j'essaie de générer des dépôts d'entity et de recevoir un tel message

Pas de Métadonnées Classes de processus

j'ai trouvé l'utilisation de

utiliser la DoctrineORMMapping comme ORM; et @ORMTable ne fonctionne pas correctement.

si je change all @ORMTable En just @Table ( et autres annotations) - cela commence à fonctionner, mais je ne veux vraiment pas l'obtenir de cette façon car il devrait fonctionner avec @ORM annotation.

j'ai suivi instructions de la page ci-dessous sans chance. Je sais que je suis proche mais je manque quelque chose avec des chemins de fichiers ou des espaces de noms. S'il vous plaît aider.

http://docs.doctrine-project.org/projects/doctrine-common/en/latest/reference/annotations.html

<!-Est-ce que quelqu'un a eu un tel problème? Ce que je manque?

cli-config,

use DoctrineCommonAnnotationsAnnotationReader;
use DoctrineCommonAnnotationsAnnotationRegistry;

require_once 'Doctrine/Common/ClassLoader.php';

define('APPLICATION_ENV', "development");
error_reporting(E_ALL);



//AnnotationRegistry::registerFile("Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php");
//AnnotationRegistry::registerAutoloadNamespace("SymfonyComponentValidatorConstraint", "Doctrine/Symfony");
//AnnotationRegistry::registerAutoloadNamespace("Annotations", "/Users/ivv/workspaceShipipal/shipipal/codebase/application/persistent/");

$classLoader = new DoctrineCommonClassLoader('Doctrine');
$classLoader->register();

$classLoader = new DoctrineCommonClassLoader('Entities', __DIR__ . '/application/');
$classLoader->register();
$classLoader = new DoctrineCommonClassLoader('Proxies', __DIR__ . '/application/persistent');
$classLoader->register();

$config = new DoctrineORMConfiguration();
$config->setProxyDir(__DIR__ . '/application/persistent/Proxies');
$config->setProxyNamespace('Proxies');

$config->setAutoGenerateProxyClasses((APPLICATION_ENV == "development"));


$driverImpl = $config->newDefaultAnnotationDriver(array(__DIR__ . "/application/persistent/Entities"));
$config->setMetadataDriverImpl($driverImpl);

if (APPLICATION_ENV == "development") {
    $cache = new DoctrineCommonCacheArrayCache();
} else {
    $cache = new DoctrineCommonCacheApcCache();
}

$config->setMetadataCacheImpl($cache);
$config->setQueryCacheImpl($cache);


$connectionOptions = array(
    'driver'   => 'pdo_mysql',
    'host'     => '127.0.0.1',
    'dbname'   => 'mydb',
    'user'     => 'root',
    'password' => ''

);

$em = DoctrineORMEntityManager::create($connectionOptions, $config);
$platform = $em->getConnection()->getDatabasePlatform();
$platform->registerDoctrineTypeMapping('enum', 'string');

$helperSet = new SymfonyComponentConsoleHelperHelperSet(array(
     'db' => new DoctrineDBALToolsConsoleHelperConnectionHelper($em->getConnection()),
     'em' => new DoctrineORMToolsConsoleHelperEntityManagerHelper($em)
));

de l'Utilisateur.php(version de travail, initialement il était comme décrit, @Table était @ORMTable et d'autres annotations similaires avaient @ORM partie comme @ORMColumn etc)

<?php
namespace Entities;


use DoctrineMapping as ORM;

/**
 * User
 *
 * @Table(name="user")
 * @Entity(repositoryClass="RepositoryUser")
 */
class User
{
    /**
     * @var integer $id
     *
     * @Column(name="id", type="integer", nullable=false)
     * @Id
     * @GeneratedValue
     */
    private $id;

    /**
     * @var string $userName
     *
     * @Column(name="userName", type="string", length=45, nullable=false)
     */
    private $userName;

    /**
     * @var string $email
     *
     * @Column(name="email", type="string", length=45, nullable=false)
     */
    private $email;

    /**
     * @var text $bio
     *
     * @Column(name="bio", type="text", nullable=true)
     */
    private $bio;

    public function __construct()
    {

    }

}
19
demandé sur waney 2012-03-18 06:30:00

10 réponses

EDIT 3:

si c'est important, J'utilise la Doctrine 2.2.1. Bref, j'ajoute juste un peu plus d'information sur ce sujet.

j'ai creusé autour de la Doctrine \ Configuration.classe php pour voir comment newDefaultAnnotationDriver a créé L'AnnotationDriver. La méthode commence à la ligne 125, mais la partie pertinente est la ligne 145 à 147 si vous utilisez la dernière version de la bibliothèque commune.

} else {
    $reader = new AnnotationReader();
    $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\');
}

je n'ai pas pu trouver l' setDefaultAnnotationNamespace méthode dans AnnotationReader classe. Donc, c'était bizarre. Mais je suppose qu'il définit la Doctrine de l'espace de noms\Orm\Mapping, de sorte que les annotations dans cet espace de noms n'ont pas besoin d'être préfixées. D'où l'erreur puisqu'il semble que l'outil cli doctrine génère les entités différemment. Je ne suis pas sûr pourquoi.

vous remarquerez dans ma réponse ci-dessous, je n'ai pas appelé la méthode setDefaultAnnotationNamespace.

On une note de côté, j'ai remarqué dans votre Entité Utilisateur classe que vous avez use Doctrine\Mapping as ORM. Ne pas le fichier généré créer