2010-09-01 3 views
5

Je suis juste en train de se familiariser avec Doctrine, et en utilisant le chargement paresseux suggéré des modèles. Selon les tutoriels, j'ai créé un fichier d'amorçage de la doctrine:Doctrine paresseux chargement

<?php 
require_once(dirname(__FILE__) . '/libs/doctrine/lib/Doctrine.php'); 
spl_autoload_register(array('Doctrine', 'autoload')); 
$manager = Doctrine_Manager::getInstance(); 
$manager->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE, true); 
$manager->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING, Doctrine_Core::MODEL_LOADING_CONSERVATIVE); 
Doctrine_Core::loadModels(array(dirname(__FILE__) . '/models/generated', dirname(__FILE__) . '/models')); //this line should apparently cause the Base classes to be loaded beforehand 

Mes modèles et classes de base ont tous été créés par la doctrine.

J'ai aussi créé un fichier de test simple comme suit:

<?php 
require_once('doctrine_bootstrap.php'); 

$user = new User(); 
$user->email = '[email protected]'; 
echo $user->email; 

Cependant, cela génère l'erreur suivante:

Fatal error: Class 'User' not found in E:\xampp\htdocs\apnew\services\doctrine_test.php on line 4 

Cependant, si je requiers explicitement l'BaseUser.php et l'utilisateur fichiers .php, alors ça fonctionne bien sans aucune erreur

<?php 
require_once('doctrine_bootstrap.php'); 
require_once('models/generated/BaseUser.php'); 
require_once('models/User.php'); 

$user = new User(); 
$user->email = '[email protected]'; 
echo $user->email; 

Donc, il semble que Doctine n'est pas au charger les modèles correctement. Qu'est-ce que je rate?

Répondre

2

OK, vous devez donc la ligne suivante dans le fichier d'amorçage:

spl_autoload_register(array('Doctrine_Core', 'modelsAutoload')); 

Et puis fonctionne le chargement automatique comme prévu

0

Dans le modèle User.php, la classe BaseUser.php doit être exigée en haut. Comme la classe d'utilisateurs étend le

J'ai eu ce problème et cela l'a résolu. Je serais intéressé s'il y a quelque chose que je manque pour ne pas avoir à faire cela inclure manuellement. Donnez un coup de feu et voir si elle résout le problème sans avoir à exiger la User.php

+0

Cela fonctionne partiellement, mais je dois encore require_once ('models/User.php') en haut de mon fichier doctrine_test.php – JonoB

2

Votre approche est correcte, puisque la doctrine a son propre chargement functionallity:

Doctrine::loadModels('models'); 
Doctrine::loadModels('models/generated'); 
Doctrine::loadModels('models/tables'); 
... 

Ce n'est pas récursive si vous devez ajouter les dossiers contient vos modèles mappés/gérés.

Questions connexes