2010-09-01 2 views
5

Mi sto solo occupando di Doctrine e utilizzo del caricamento pigro suggerito dei modelli. Come per i tutorial, ho creato una dottrina file di bootstrap:Doctrine lazy loading

<?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 

I miei modelli e classi di base sono stati tutti creati da Doctrine.

Ho anche creato un file di test semplice come segue:

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

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

Tuttavia, questo genera il seguente errore:

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

Tuttavia, se ho bisogno esplicitamente il BaseUser.php e Utente file .php, quindi funziona perfettamente senza errori

<?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; 

Quindi, sembra che Doctine non sia caricare i modelli correttamente. Cosa mi manca?

risposta

2

OK, quindi è necessario la seguente riga nel file di bootstrap:

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

E poi caricamento automatico funziona come previsto

0

Nel modello User.php deve esserci un requisito per la classe BaseUser.php in alto. Poiché la classe utente estende lo BaseUser.php

, ho riscontrato questo problema e questo lo ha risolto. Sarei interessato se c'è qualcosa che mi manca a non dover fare che includere manualmente. Dare che un colpo e vedere se si risolve il problema senza dover richiedere l'User.php

+0

Questo funziona parzialmente, ma devo ancora require_once ('models/User.php') nella parte superiore del mio file doctrine_test.php – JonoB

2

Il tuo approccio è corretto in quanto dottrina ha il proprio carico functionallity:

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

Questo non è ricorsivo quindi è necessario aggiungere le cartelle che contiene i tuoi modelli mappati/gestiti.