2010-09-01 26 views
5

Ich bin gerade dabei, Doctrine in den Griff zu bekommen und das vorgeschlagene verzögerte Laden von Modellen zu verwenden. Richtet sich nach den Übungen habe ich eine Lehre Bootstrap-Datei erstellt:Doktrin 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 

Meine Modelle und Basisklassen wurden alle von Lehre geschaffen.

Ich habe erstellt auch eine einfache Test-Datei wie folgt:

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

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

Doch dies erzeugt die folgenden Fehler:

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

Wenn ich jedoch ausdrücklich die BaseUser.php erfordern und Benutzer .php-Dateien, dann funktioniert es ohne Fehler

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

So scheint es, dass Doctine nicht au ist um die Modelle korrekt zu laden. Was vermisse ich?

Antwort

2

OK zu verlangen ist, so dass Sie die folgende Zeile in der Bootstrap-Datei benötigen:

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

Und dann funktioniert Autolade wie erwartet

0

In der User.php-Modell muss eine Anforderung für die BaseUser.php-Klasse an der Spitze sein. Wie die Benutzerklasse erweitert das BaseUser.php

Ich hatte dieses Problem und das hat es gelöst. Mich würde interessieren, ob es etwas gibt was ich vermisse, um das manuell nicht zu tun. Geben, dass ein Schuss und sehen, ob es das Problem behebt, ohne die User.php

+0

Das funktioniert teilweise, aber ich muss noch require_once ('models/User.php') an der Spitze meiner Datei doctrine_test.php – JonoB

2

Ihr Ansatz ist richtig, da Lehre seiner eigenen Laden functionallity hat:

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

Dies ist nicht rekursiv, so dass Sie Ordner hinzufügen müssen, dass enthält Ihre zugeordneten/verwalteten Modelle.