Bonjour à tous,
Je viens d'installer doctrine 1.2.x (la dernière version 1.2), faute d'avoir droit à PHP 5.3. Et dans mon fichier de bootstrap du projet, j'ai mis ceci:
Puis j'ai exécuté la commande suivante la première fois pour créer mes shémas:
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 //Bootstapper Doctrine require_once(dirname(__FILE__) . '/lib/3rd/Doctrine/Doctrine.php'); spl_autoload_register(array('Doctrine', 'autoload')); Doctrine_Core::loadModels(FRAMEWORK_ROOT . DIRECTORY_SEPARATOR . 'models'); $doctrine_mgr = Doctrine_Manager::getInstance(); $doctrine_mgr->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE, true); $doctrine_mgr->setAttribute(Doctrine_Core::ATTR_AUTOLOAD_TABLE_CLASSES, true); $doctrine_mgr->setAttribute(Doctrine_Core::ATTR_QUOTE_IDENTIFIER, true); $doctrine_mgr->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING, Doctrine_Core::MODEL_LOADING_CONSERVATIVE); $db = $connMgr->getConn(); //Retourne une instance d'une classe héritant de PDO. $conn = Doctrine_Manager::connection($db); $conn->setOption('username', DB_USER); $conn->setOption('password', DB_PASS);
Ce qui as créé les fichiers dans mon dossier /models à la base du projet:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Doctrine_Core::generateModelsFromDb(FRAMEWORK_ROOT . DIRECTORY_SEPARATOR . 'models', array('default'), array('generateTableClasses' => true));
#$ ls -l * -R
-rw-r--rwx 1 fmazerolle fmazerolle 298 2011-01-26 10:08 Group.php
-rw-r--rwx 1 fmazerolle fmazerolle 344 2011-01-26 10:08 GroupTable.php
-rw-r--rwx 1 fmazerolle fmazerolle 301 2011-01-26 10:08 Locale.php
-rw-r--rwx 1 fmazerolle fmazerolle 348 2011-01-26 10:08 LocaleTable.php
-rw-r--rwx 1 fmazerolle fmazerolle 328 2011-01-26 10:08 PageAssociation.php
-rw-r--rwx 1 fmazerolle fmazerolle 384 2011-01-26 10:08 PageAssociationTable.php
-rw-r--rwx 1 fmazerolle fmazerolle 307 2011-01-26 10:08 PageMeta.php
-rw-r--rwx 1 fmazerolle fmazerolle 356 2011-01-26 10:08 PageMetaTable.php
-rw-r--rwx 1 fmazerolle fmazerolle 295 2011-01-26 10:08 Page.php
-rw-r--rwx 1 fmazerolle fmazerolle 340 2011-01-26 10:08 PageTable.php
-rw-r--rwx 1 fmazerolle fmazerolle 304 2011-01-26 10:08 PageUrl.php
-rw-r--rwx 1 fmazerolle fmazerolle 352 2011-01-26 10:08 PageUrlTable.php
-rw-r--rwx 1 fmazerolle fmazerolle 307 2011-01-26 10:08 PageZone.php
-rw-r--rwx 1 fmazerolle fmazerolle 356 2011-01-26 10:08 PageZoneTable.php
-rw-r--rwx 1 fmazerolle fmazerolle 326 2011-01-26 11:59 Supergroup.php
-rw-r--rwx 1 fmazerolle fmazerolle 364 2011-01-26 10:08 SupergroupTable.php
-rw-r--rwx 1 fmazerolle fmazerolle 295 2011-01-26 10:08 User.php
-rw-r--rwx 1 fmazerolle fmazerolle 340 2011-01-26 10:08 UserTable.php
generated:
total 48
-rw-r--rwx 1 fmazerolle fmazerolle 2197 2011-01-26 10:08 BaseGroup.php
-rw-r--rwx 1 fmazerolle fmazerolle 1829 2011-01-26 10:08 BaseLocale.php
-rw-r--rwx 1 fmazerolle fmazerolle 2070 2011-01-26 10:08 BasePageAssociation.php
-rw-r--rwx 1 fmazerolle fmazerolle 2017 2011-01-26 10:08 BasePageMeta.php
-rw-r--rwx 1 fmazerolle fmazerolle 9886 2011-01-26 10:08 BasePage.php
-rw-r--rwx 1 fmazerolle fmazerolle 1643 2011-01-26 10:08 BasePageUrl.php
-rw-r--rwx 1 fmazerolle fmazerolle 1566 2011-01-26 10:08 BasePageZone.php
-rw-r--rwx 1 fmazerolle fmazerolle 1736 2011-01-26 12:00 BaseSupergroup.php
-rw-r--rwx 1 fmazerolle fmazerolle 4344 2011-01-26 10:08 BaseUser.php
Le problème semble en fait apparaitre lorsque je tente de charger les modèles avec le code suivant:
Retournera cette erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Doctrine_Core::loadModels(FRAMEWORK_ROOT . DIRECTORY_SEPARATOR . 'models');
Pour rendre les choses un peu plus explicites, voici le contenu de /models/Supergroup.php:( ! ) Fatal error: Class 'BaseSupergroup' not found in /var/www/cms/client1/framework/models/Supergroup.php on line 14
Call Stack
# Time Memory Function Location
1 0.0001 326632 {main}( ) ../index.php:0
2 0.0006 365596 require( '/var/www/cms/client1/framework/frontcontroller.php' ) ../index.php:6
3 0.0014 398040 require( '/var/www/cms/client1/framework/bootstrap.php' ) ../frontcontroller.php:18
4 0.0082 835396 Doctrine_Core::loadModels( ) ../bootstrap.php:103
5 0.0250 2668304 require_once( '/var/www/cms/client1/framework/models/Supergroup.php' ) ../Core.php:668
Ps.: Oui, "test" s'affiche bien, signe que cette classe est bien autoloadé, mais pas celles contenues dans /models/generated/, dans ce cas-ci: BaseSupergroup.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 <?php echo 'test'; /** * Supergroup * * This class has been auto-generated by the Doctrine ORM Framework * * @package ##PACKAGE## * @subpackage ##SUBPACKAGE## * @author ##NAME## <##EMAIL##> * @version SVN: $Id: Builder.php 7490 2010-03-29 19:53:27Z jwage $ */ class Supergroup extends BaseSupergroup { }
J'ai aussi essayé de copier tout ce qui était dans generated/ vers models/, ca n'a rien changé.
Bref, je ne comprend pas les choses suivantes:
- À quoi servent les fichiers générés par le paramètre generateTableClasses => true
- Pourquoi getTable('page') se retrouve à charger Supergroup
- Pourquoi l'autoload n'arrive pas à fonctionner pour les fichier de type BaseXXXX, qu'ils soient dans le dossier generated ou pas.
Toute réflexion est bienvenue !
Partager