2010-07-22 5 views
0

Je travaille sur le tutoriel Doctrine au http://www.Doctrine-project.org/ et je reçois une erreur fatale lorsque j'essaie d'exécuter mon script generate.php qui fait mes modèles et crée des tables dans la base de données:Erreur fatale avec Doctrine lors de l'utilisation de generate.php

Fatal error: Class 'BaseCharity' not found in ...\models\Charity.php on line 14 

generate.php:

require_once('bootstrap.php'); 
Doctrine_Core::dropDatabases(); 
Doctrine_Core::createDatabases(); 
Doctrine_Core::generateModelsFromYaml('schema.yml', 'models'); 
Doctrine_Core::createTablesFromModels('models'); 

et schema.yml

Charity: 
    actAs: [Timestampable] 
    columns: 
    active: 
     type: boolean 
     default: '1' 
    owed: decimal(32,2) 
    totalPayed: decimal(32,2) 
    name: string(255) 
    website: string(255) 
    description: text 
    icon: string(255) 

Je suis assez perplexe par cela, je peux l'obtenir pour créer correctement d'autres tables qui sont très similaires ou beaucoup plus compliquées que celle-ci. J'ai essayé de le réécrire aussi. Je n'ai vraiment aucune idée d'où vient cette erreur.

Répondre

1

Vous devez enregistrer les modèles avec l'autochargeur fourni par Doctrine. Pas besoin d'utiliser des itérateurs ou ce que si jamais

Doctrine::loadModels('path/to/your/models'); 

Vous pouvez bien sûr utiliser les temps sevaral:

Doctrine::loadModels('path/to/your/models/generated'); 
Doctrine::loadModels('path/to/your/models/custom');  
Doctrine::loadModels('path/to/your/models'); 
0

trouvé ceci:

http://www.doctrine-project.org/jira/browse/DC-344

Salut, je me suis tombé sur le même problème et je pense que je sais où la question est .

Alors Doctrine_Core :: createTablesFromModels() appelle Doctrine_Export :: exportSchema() qui appelle à son tour Doctrine_Core :: loadModels(). Doctrine_Core :: loadModels() utilise RecursiveIteratorIterator et itère sur tous les fichiers trouvés.

Maintenant, je pense que l'ordre des fichiers renvoyés par RecursiveIteratorIterator est pas toujours le même (dépend OS, noms de fichiers et le rayonnement cosmique), mais la chose la plus importante est ici que fichiers de classe de « modules/générés ' répertoire (comme dans les exemples) NE SONT PAS inclus avant les sous-classes dérivées à partir de classes générées. Cela signifie que Doctrine_Core :: autoload() échoue pour charger les classes à partir du répertoire 'modules/généré', exactement cette vérification échoue:

if (0 == strpos ($ className, 'Doctrine_') || class_exists ($ className, false) || interface_exists ($ className, false))

comme classe de base ne démarre pas avec 'Doctrine_' et n'est pas encore chargé.

Pour fixer correctement l'algorithme de modules de chargement doit être modifié pour d'abord inclure « modules/générés » classes et puis repos des classes. Je suis pas sûr mais peut-être que Core :: autoload() pourrait être modifié pour inclure les classes de base correctement.

RAPIDE DE DEPANNAGE: Pour contourner ce problème rapide, j'ai changé les paramètres dans appel à createTablesFromModels() à:

Doctrine_Core :: createTablesFromModels (tableau ('modèles/générés', 'modèles'));

comme createTablesFromModels() peut accepter tableau de répertoires.

J'espère que cela vous aide, s'il vous plaît laissez-moi sais si vous avez besoin de plus d'informations. Merci!

Questions connexes