Schritt-für-Schritt-Umstellung auf Modul-basierte Ordnerstruktur für Zend-Projekt, Kopfgeld kommt

8

Ich habe ein Kopfgeld von 250 Punkten, aber das System erlaubt mir nicht, es sofort zu starten.

Ich bin auf der Suche nach einer Schritt-für-Schritt-Erklärung, wie man von der normalen Ordnerstruktur auf der linken Seite, wo der application Ordner models,views,controllers enthält, zur modulbasierten Ordnerstruktur auf der rechten Seite wechselt, wo application enthält einen modules Ordner, der die einzelnen Module mit ihrem eigenen models,views,controllers enthält.

Ich sage "conversion", weil ich nicht glaube, dass zend es uns ermöglicht, Projekte von Anfang an mit der Modularchitektur zu erstellen, aber wenn dies der Fall wäre, wäre das aufwändig und würde die manuelle Änderung dieser Ordnerstruktur überflüssig machen.

Hier sind meine bisherigen Erfahrungen

  • Wenn ich ein Modul zf create module product erstelle, wird der Module-Ordner generiert und ein Ordner product wird darin erzeugt und die views,controllers,models für dieses Modul werden ebenfalls erzeugt.

  • Aber ich muss auch das Hauptverzeichnis views,controllers,models in einen eigenen Ordner modules/default verschieben. Wenn ich diesen Ordner manuell erstelle und den Hauptcode views,models,controllers dorthin verschiebe, erhalte ich einen Fehler, wenn ich versuche, dem default -Modul neue Controller hinzuzufügen. Der Fehler ist, dass das Haupt (jetzt fehlt) views,controllers,models in application neu generiert und den neuen Controller in application/controllers/newcont einfügt, weil er nicht erkennt, dass der Standard-Controller-Ordner existiert manuell in application/modules/default/controllers/ verschoben

  • Also meine Lösung dazu war zf create module default , dann kopiere die Haupt views,models,controllers dort. Es sieht am Ende gleich aus, aber irgendwie macht die Methode zf create module einen Unterschied. Wenn ich es so mache, werden neue Controller korrekt in application/modules/default/controllers und nicht application/controllers

  • hinzugefügt

Das halbe Problem ist gelöst. Aber wenn ich versuche, die Anwendung zu sehen, sehe ich nichts von index/index view. Ich bekomme auch keine Fehler, aber ich sehe nichts. Ich vermute, dass es daran liegt, dass die Anwendung nicht weiß, dass die index/index -Ansicht verschoben wurde.

  • Früher befand sich das unter application/views/scripts/index/index.phtml
  • aber befindet sich jetzt bei application/modules/default/views/scripts/index/index.phtml

Ich vermute, dass ich Änderungen an der application.ini oder an bootstrap.php oder an einem anderen Ort vornehmen muss. Was genau sind die Schritte, um dieses Ding reibungslos zu erledigen und es zum Laufen zu bringen? Ich benutze das neueste ZF 1.10.8. Beginnen Sie mit der Erstellung eines neuen Zend-Projekts, damit die genauen Schritte nicht verwechselt werden.

    
jblue 12.10.2010, 06:24
quelle

2 Antworten

10

Hier ist, was ich getan habe, um Ihrem Beispiel zu folgen (von Grund auf):

%Vor%

Ich habe dann controllers , models und views von ./application auf ./application/modules verschoben.

Als nächstes habe ich application.ini geöffnet und diese Zeile ersetzt (was ZF mitteilt, wo es Controller in einer nicht-modularen App gibt):

%Vor%

mit:

%Vor%

was ZF sagt wo man Module findet.

Ich habe dann manuell einen Index-Controller für das Produkt-Modul erstellt, damit ich testen konnte, ob das funktioniert hat. Ich traf dann Ссылка , um zu sehen, ob die Standard-Modul-Index-Aktion immer noch funktionierte, tat es nicht, stattdessen bekam ich den Fehler:

  

Fataler Fehler: Uncaught-Ausnahme 'Zend_Controller_Dispatcher_Exception' mit Meldung 'Ungültige Controller-Klasse (' Default_ErrorController ')' in ...

Es hört sich so an, als ob Sie hier sind.

Es gibt zwei Möglichkeiten, diesen Fehler zu beheben, und die Dokumentation ist ziemlich irreführend (möglicherweise sogar falsch). Es gibt an :

  

Beachten Sie, dass Controller im Standardmodul kein Namespace-Präfix benötigen. Im obigen Beispiel benötigen die Controller im Standardmodul daher kein Präfix "Default_" - sie werden einfach entsprechend ihrem Basiscontrollernamen gesendet: "IndexController" und "FooController". Ein Namespacepräfix wird jedoch in allen anderen Modulen verwendet.

aber der obige Fehler zeigt eindeutig, dass ZF nach einer ErrorController-Klasse namens Default_ErrorController sucht. Um dies zu beheben, können Sie eines von zwei Dingen tun:

  • Ändern Sie die Klassennamen von application / modules / default / controllers / IndexController.php von IndexController auf Default_IndexController und application / modules / default / controllers / ErrorController.php von ErrorController auf Default_ErrorController
  • Oder entfernen Sie diese Zeile:

    resources.frontController.params.prefixDefaultModule="1"

aus der application.ini. Diese Zeile weist ZF an, den Namespace 'Default_' für die Standard-Modulklassen zu verwenden. Ohne ihn wird nur nach 'IndexController' gesucht. Ich ging für die letztere Option, und Ссылка arbeitete dann wie erwartet.

In Ihrem Fall sagten Sie, Sie hätten eine leere Seite bei / index / index, was entweder:

bedeutet
  • Sie haben ein anderes Problem
  • Sie haben Fehler im Entwicklungsmodus deaktiviert
  • Sie arbeiten im Produktionsmodus, in dem die Fehler standardmäßig deaktiviert sind (am wahrscheinlichsten)

Um die letzte Option zu überprüfen, öffnen Sie application.ini und temporär ändern Sie phpSettings.display_errors von 0 auf 1 im Produktionsabschnitt. Wenn Sie dann den gleichen Fehler haben, den ich oben hatte, werden Sie hoffentlich in der Lage sein, alles in Ordnung zu bringen.

Ich hoffe, das ist hilfreich. Alles, was ich sagen kann, ist, dass du nicht zu sehr auf Zend_Tool angewiesen bist, um deine App zu verwalten - es kann nicht alles machen, und oft ist es einfacher, Dinge manuell zu verschieben, als alles über zu versuchen. der Befehl zf; vor allem bei der Umstrukturierung.

    
Tim Fountain 12.10.2010, 22:20
quelle
1

Nun, ich entwickle in Netbeans IDE.

Ссылка

Ich bin ein Neuling: P (brauche 10 Punkte)

Jeder Bootstrap sollte haben:

%Vor%

Main Bootstrap:

%Vor%

application.ini:

%Vor%

Mein Bootstrap hat mehr Code, einschließlich Plugins.

    
jd_7 12.10.2010 17:16
quelle

Tags und Links