IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[Doctrine] Warning: class_parents() [function.class-parents]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [Doctrine] Warning: class_parents() [function.class-parents]
    Je teste pour la première Doctrine version 2.0.5.
    J'ai récupérer les sources via le download et installé dans RACINE/LibrairiePhp/doctrine-orm/. RACINE étant le chemin à partir de la racine du serveur.

    J'ai crée un fichier de test à la racine de mon site (au même niveau de LibrairiePhp)
    test.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
     
    <?php
     
    require_once(RACINE.'/LibrairiePhp/doctrine-orm/Doctrine/Common/ClassLoader.php');
    $classLoader = new \Doctrine\Common\ClassLoader('Doctrine', RACINE.'/LibrairiePhp/doctrine-orm/');
    $classLoader->register(); // register on SPL autoload stack
     
    use Doctrine\ORM\EntityManager,
        Doctrine\ORM\Configuration;
     
    // ...
    //cette variable permet de switcher entre l'environnement de dev et de prod
    $applicationMode = 'developpement';
    if ($applicationMode == DOCTRINECONFIGURATION) {
        $cache = new \Doctrine\Common\Cache\ArrayCache;
    } else {
        $cache = new \Doctrine\Common\Cache\ApcCache;
    }
     
    $config = new Configuration;
    $config->setMetadataCacheImpl($cache);
     
    $driverImpl = $config->newDefaultAnnotationDriver(RACINE.'/Model/Entities'); 
    $config->setMetadataDriverImpl($driverImpl); 
     
    $config->setQueryCacheImpl($cache);
     
    $config->setProxyDir(RACINE.'/Model/Proxies');
    $config->setProxyNamespace('\Model\Proxies');
    $config->setAutoGenerateProxyClasses(false);
     
    /*
    $config->setSQLLogger($logger);
    $config->getSQLLogger();
    */
     
    $connectionOptions = array(
        'dbname' => DATABASE,
        'user' => SQLUSER,
        'password' => SQLUSERPWD,
        'host' => SQLSERVER,
        'driver' => 'pdo_mysql',
    );
     
    $em = EntityManager::create($connectionOptions, $config);
     
     
    		// custom datatypes (not mapped for reverse engineering)
    		$em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('set', 'string');
    		$em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');
    		$em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('blob', 'string');
     
    		// fetch metadata
    		$driver = new \Doctrine\ORM\Mapping\Driver\DatabaseDriver(
    			$em->getConnection()->getSchemaManager()
    		);
    		$em->getConfiguration()->setMetadataDriverImpl($driver);
    		$cmf = new \Doctrine\ORM\Tools\DisconnectedClassMetadataFactory($em);
    		$cmf->setEntityManager($em); 
     
    		$metadata = $cmf->getAllMetadata(); 
    	/*	
    		$generator = new \Doctrine\ORM\Tools\EntityGenerator();
    		$generator->setGenerateAnnotations(true);
    		$generator->setUpdateEntityIfExists(false);
    		$generator->setGenerateStubMethods(true);
    		$generator->setGenerateAnnotations(true);
    		$generator->generate($metadata, RACINE.'/Model/Entities');
                    echo 'Done';
    */
     
    		$classLoader = new \Doctrine\Common\ClassLoader('Model', RACINE.'/Model/Entities/');
    		$classLoader->register(); // register on SPL autoload stack*/
     
     
     
     
     
     
    $users = $em->find('Utilisateurs', 1);
     
     
    //$users = $em->getRepository('Utilisateurs')->findBy(array('idUtilisateurs' => 1));
     
     
    		print_r($users);
     
     
     
     
     
    ?>
    Mes classes se crées bien dans /Model/Entities/
    par contre je suis surpris de ne pas avoir de namespace Model\Entities en haut de ces classes, mais c'est peut être normal.

    En revanche dès que je tente une requête, j'ai l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Warning: class_parents() [function.class-parents]: Class Utilisateurs does not exist and could not be loaded in C:\workspacePhp\frameworkPhp\LibrairiePhp\doctrine-orm\Doctrine\ORM\Mapping\ClassMetadataFactory.php on line 222
     
    Warning: array_reverse() expects parameter 1 to be array, boolean given in C:\workspacePhp\frameworkPhp\LibrairiePhp\doctrine-orm\Doctrine\ORM\Mapping\ClassMetadataFactory.php on line 222
     
    Warning: Invalid argument supplied for foreach() in C:\workspacePhp\frameworkPhp\LibrairiePhp\doctrine-orm\Doctrine\ORM\Mapping\ClassMetadataFactory.php on line 222
     
    Fatal error: Uncaught exception 'ReflectionException' with message 'Class Utilisateurs does not exist' in C:\workspacePhp\frameworkPhp\LibrairiePhp\doctrine-orm\Doctrine\ORM\Mapping\ClassMetadata.php:67 Stack trace: #0 C:\workspacePhp\frameworkPhp\LibrairiePhp\doctrine-orm\Doctrine\ORM\Mapping\ClassMetadata.php(67): ReflectionClass->__construct('Utilisateurs') #1 C:\workspacePhp\frameworkPhp\LibrairiePhp\doctrine-orm\Doctrine\ORM\Mapping\ClassMetadataFactory.php(351): Doctrine\ORM\Mapping\ClassMetadata->__construct('Utilisateurs') #2 C:\workspacePhp\frameworkPhp\LibrairiePhp\doctrine-orm\Doctrine\ORM\Mapping\ClassMetadataFactory.php(260): Doctrine\ORM\Mapping\ClassMetadataFactory->newClassMetadataInstance('Utilisateurs') #3 C:\workspacePhp\frameworkPhp\LibrairiePhp\doctrine-orm\Doctrine\ORM\Mapping\ClassMetadataFactory.php(169): Doctrine\ORM\Mapping\ClassMetadataFactory->loadMetadata('Utilisateurs') #4 C:\workspacePhp\frameworkPhp\LibrairiePhp\doctrine-orm\Doctrine\ORM\EntityManager.php(251): Doctrine\ORM\Mapping\ClassMet in C:\workspacePhp\frameworkPhp\LibrairiePhp\doctrine-orm\Doctrine\ORM\Mapping\ClassMetadata.php on line 67
    Quelqu'un aurait il une idée l'origine du l'erreur?
    Merci à l'avance pour votre aide.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 6
    Points : 5
    Points
    5
    Par défaut problème localisé
    Le problème vient de l'autoloader
    si je fais un require avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    require_once(RACINE."/Model/Entities/Utilisateurs.php");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $users = $em->find('Utilisateurs', 1);
    fonctionne parfaitement.

    Il y donc une erreur sur l'autoloader mais que je n'ai pas encore localisé.

    Merci d'avance pour vos retour

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 6
    Points : 5
    Points
    5
    Par défaut problème localisé et résolu
    J'ai supprimé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $classLoader = new \Doctrine\Common\ClassLoader('Model', RACINE.'/Model/Entities/');
    $classLoader->register(); // register on SPL autoload stack*/
    et utilisé mon propre autoloader

    maintenant cela fonctionne parfaitement

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer la classe parente
    Par jagboys dans le forum MFC
    Réponses: 3
    Dernier message: 15/07/2006, 00h06
  2. this et classe "parent"
    Par TabrisLeFol dans le forum Langage
    Réponses: 4
    Dernier message: 25/05/2006, 13h42
  3. [POO]héritage du constructeur de la classe parente
    Par new_wave dans le forum Langage
    Réponses: 7
    Dernier message: 10/03/2006, 14h25
  4. Réponses: 3
    Dernier message: 09/02/2006, 17h01
  5. Conception d'une classe parente
    Par VincentB dans le forum Langage
    Réponses: 9
    Dernier message: 24/06/2003, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo