Zend Framework Models nicht laden von autoloader
Ich habe meine setup-Anwendung mit Zend_Application. Ich habe eine _initAutoload()
Methode in meinem Bootstrap.php wich sieht wie folgt aus:
public function _initAutoload(){
$this->bootstrap("frontController");
$front = $this->frontController;
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->registerNamespace('Client_');
$autoloader->registerNamespace('Frontend_');
$autoloader->registerNamespace('Global_');
$autoloader->registerNamespace('Global_Helper_');
$autoloader->setFallbackAutoloader(true);
$modules = $front->getControllerDirectory();
$default = $front->getDefaultModule();
foreach (array_keys($modules) as $module) {
if ($module === $default) {
continue;
}
$autoloader->pushAutoloader(new Zend_Application_Module_Autoloader(array(
"namespace" => ucwords($module),
"basePath" => $front->getModuleDirectory($module),
)));
}
return $autoloader;
}
Ich habe setup FrontController Präfix der Standard Modul auch (scheint mehr logisch für mich) $front->setParam("prefixDefaultModule", true)
Ich denke, dass ich das übliche Verzeichnis-Struktur.
Das problem:
Ich habe subdomains für jedes Modul, dass ich habe. Alles funktioniert feine in der main - main - domain (www). Das main-Modul ist frontend. Wenn frontend ist das Standard-Modul, dann funktioniert das :). Ok. Nun. Für jede subdomain, habe ich das gleiche index.php aber es verändert die env Wert. Für client subdomain die env-Wert ist client etc. Jeder env-Wert entspricht meine application.xml Abschnitt. Jeder application.xml subdomain Abschnitt (client-api, etc) erweitern Sie die main-Sektion, die heißt defaults (derzeit gibt es einen Test-Abschnitt, auch die können Fehler usw, also jede subdomain erstreckt sich die Prüfung und testen erweitert die Standardwerte).
Jeder subdomain Abschnitt der application.xml änderungen der Standard Modul-Namen. Also für den Abschnitt defaults seiner frontend, zum Abschnitt client seinen Kunden, etc.
Jetzt
Wenn ich auf domain.com/client oder domain.com/api - seine Ordnung. Beide API & Client verwenden Client_Model_NameOfTheModel und wie es soll - es befindet sich application/modules/client/models/NameOfTheModel.php und die DbTable/NameOfTheModel.php
FUNKTIONIERT
ABER
Wenn ich auf das Modul von seiner jeweiligen subdomain (client.domain.com, api.domain.com etc) und das Standard-Modul wurde geändert von frontend zu seinem jeweiligen subdomain-Modul Namen - es endet die Arbeit. Es auch keine Ausgabe, die "stack-trace".
Warning: include(Client/Model/ContactLists.php) [function.include]: failed to open stream: Keine solche Datei oder Verzeichnis in [hier ist-mein-Weg-zu-Stammverzeichnis]/library/Zend/Loader.php on line 136
Warning: include() [function.include]: Failed opening 'Client/Model/ContactLists.php' for inclusion (include_path='[hier ist-mein-Weg-zu-root]/library:.:/usr/lib/php:/usr/local/lib/php') in [hier ist-mein-Weg-zu-Stammverzeichnis]/library/Zend/Loader.php on line 136
Fatal error: Class 'Client_Model_ContactLists' not found in [hier ist-mein-Weg-zu-Stammverzeichnis]/application/modules/client/controllers/ContactListsController.php auf der Linie 4
Ich habe versucht 2 Tage, um es arbeiten. Es funktioniert einfach nicht. Es funktioniert einfach unter die Standard-Domäne und nicht bei der application.xml ändert das Standard-Modul, um Ihre sub-Domain-Namen. Wie, die. Dieser Punkt ist sehr sehr wichtig momentan, weil ich nicht weiter und diese app braucht, um aus der sandbox (in der frühen beta-Version bis Ende dieser Woche.
Dank für jeden für ein paar Ratschläge.
PS. Sorry für die schlechte Englisch. Es ist nicht meine Muttersprache
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nur eine oberflächliche Vermutung, aber es sieht aus wie es sein könnte, der Arbeit auf Standard, da dieser Zeilen:
Im wesentlichen, wenn das Modul das Standard-Modul, es überspringt ihn, das heißt, es fällt zurück auf die fallback-autoloader, würde ich davon ausgehen, und wenn die default-autoloader kann nicht finden, Ihre Modelle, auch gibt es das Problem. Ist die concat-Funktion der root-Pfad in der Fehlermeldung und der path der Klasse seinen versuchen zu laden, richtig?
Auch, dieses sieht wie es könnte falsch sein
Ich würde denken, es müsste
Wie Ihre anderen namespaces.
Welche version von ZF verwenden Sie?
Sind Sie mit einem späteren 1.8 - 1.10-version?
Wenn dem so ist, sollten Sie mithilfe der Ressourcen in Zend_Application für ein Modul. Es stellt autoloading für Formen, Modelle, Helfer, usw. unter Ihre Module.
Wenn Sie mit einer Anwendung.ini sollten Sie eine Zeile wie diese für jedes Modul :
Ressourcen.Module.Modulname = "aktiviert"
http://framework.zend.com/manual/en/zend.application.available-resources.html#zend.application.available-resources.modules