PHP Sammelthread: Zend Framework und alles was dazugehört

Wie macht ihr das eigentlich am besten mit Zend_Application?
Holt ihr euch wirklich jedes mal die Daten z.B. so?
Zend_Registry::get('bootstrap')->getResource('db')

In den Controllern kann man ja auch auf die Bootstrap greifen, aber außerhalb ist es immer etwas doof. Deswegen habe ich direkt nach dem Instanzieren meiner Zend_Application das in der Registry gespeichert und erst dann rufe ich die Bootstrap-Methode(n) usw. auf.
 
Ich hab die DB-Ressource als Default-Adapter genommen um es bei Table-Klassen als Standard anzumelden. Zusätzlich hab ich die Connection noch in der Registry gespeichert...

Ich habe allerdings noch ein paar weitere Ressourcen welche ich gerne abrufen möchte ;)
Und ich finde den Weg über Zend_Registry das Bootstrapobjekt herausholen, dann den Wert abrufen usw usf. immer etwas kompliziert.

Spricht etwas dagegen, das Bootstrapobjekt als Singleton zu konstruieren und eine statische Methode getResource (oder ähnlich) dort hinzuzufügen?
 
Wofür brauchst du überhaupt andauernd etwas aus dem Bootstrapper?

In der normalen Bootstrap Datei (prozedurale Programmierung welche ich vor 1.8 verwendet habe) definiere ich ja mehrere Objekte welche ich zur Laufzeit benötige.
Bei mir ist es nun mal die Datenbank, zusätzlich noch ein spezieller PluginLoader sowie eine Konfiguration habe ich aktuell. Ah, und mein Acl Objekt wird auch in der Bootstrap geladen.
Auf dieses möchte ich ja immer wieder zugreifen können..
 
Also ich stelle nun mal Vermutungen an ;)
Du hast mehrere Klassen (keine Controller) die Datenbankabfragen machen und du holst jedesmal die Db-Connection aus der Zend_Registry?

Würde ich nicht empfehlen, du schaffst damit unwartbare Dependencies, besser wäre es du würdest die DB-Connection per Parameter übergeben (aus den Controllern, und da hast du die ja auch gespeichert)
 
Also ich stelle nun mal Vermutungen an ;)
Du hast mehrere Klassen (keine Controller) die Datenbankabfragen machen und du holst jedesmal die Db-Connection aus der Zend_Registry?

Ich habe teilweise Models welche diese Aufgabe erledigen und auch direkt nach dem Laden der DB-Verbindung diese als default zugewiesen bekommen.
Allerdings habe ich für kurze Queries (SELECT xyz FROM abc) kein extra Model angefertigt, wenn dieses nicht später noch ausführlicher benötigt wird für die Tabelle. In genau diesem Fall lese ich die Datenbankverbindung aus der Zend_Registry, bzw. mittlerweile aus der Bootstrap-Ressource aus.

Würde ich nicht empfehlen, du schaffst damit unwartbare Dependencies, besser wäre es du würdest die DB-Connection per Parameter übergeben (aus den Controllern, und da hast du die ja auch gespeichert)

Wie in deinem Beispiel oben im init() Teil der Controller die DB-Connection aus der Bootstrap-Ressource auslesen und in einem Attribut ablegen?
Da habe ich ja immer noch die Abhängigkeit, dass die Ressource verfügbar sein muss.
Nur einen Vorteil sehe ich dadrin.. Vor dem Abrufen jeder Ressource starte ich noch einmal den passenden bootstrap() Part, also z.B. so:
$bootstrap->bootstrap('database');
$db = $bootstrap->getResource('database');


Wenn ich das nun im init() Teil alles mache, kann ich eine Zeile weglassen und im Controller direkt $this->db verwenden, das wäre auf jeden Fall schon mal etwas praktisches würde ich nun sagen. Zum Thema Abhängigkeit wüsste ich allerdings darüber nicht, dass es weniger schafft.
 
Das ist einfach so, wenn du deine Software testen willst und sie von zig versch. Stellen Daten abrufen (mehrere Objekte aus der Registry) wird es schwer das zu testen, da du deinen Code nicht mehr isolieren kannst, er hängt immer von vielen anderen Dingen ab.
Wenn du es in nem Attribut speicherst kannst du fürs Testing auch das Objekt mocken so dass du real gar nicht auf die Db zugreifst.

Zudem ist deine Anwendnug weniger anfällig für Änderungen, wenn morgen Zf 1.9 rauskommen würde, was sehr viel an Zend_Application ändert (was zum Glück durch das Team unterbunden wird) hast du hunderte Stellen wo du Code anpassen musst, wenn dein DB-Objekt in nem Attribut liegt, musst du nur den Part anpassen, wie du es in das Attribut reinschreibst.
 
musst du nur den Part anpassen, wie du es in das Attribut reinschreibst.

... oder den Part, bei welchem ich das in der Registry speicher.

Naja, auf jeden Fall hast du mich damit überzeugt, da ich dadurch ein wenig Code einspare welchen ich sonst immer wiederhole.

Aber welche Sachen sollte ich denn doch direkt immer via Zend_Registry auslesen?

Und zu meiner Bootstrap Instanz, welche aktuell in der Registry steckt.
Wäre es nicht praktisch, wenn man die eigene Bootstrap Klasse als Singleton aufbaut?
Denn es sollte doch eigentlich nur einen Bootstrap Vorgang geben? Keine Ahnung, warum man das eventuell ein zweites mal separat, also als eigene Instanz, brauchen könnte. :-?


Auf jeden Fall ist das Zend Framework ziemlich komplex und der Einstieg wirklich nicht so leicht. Ich bin mal gespannt, ob ich noch ein paar nette Geheimnisse davon finde. :biggrin:
 
Aber welche Sachen sollte ich denn doch direkt immer via Zend_Registry auslesen?
also ich lese eigentlich nie aus der Registry.
In meinen Controllern stecken die nötigen Objekte drinne und wenn ich von da auf Klassen zugreife dann übergebe ich die benötigten dinge per Parameter (Log-Objekt, Datenbank-Objekt usw)
Hat den Vorteil, dass ich diese Klassen ganz einfach testen kann, weil ich dann einfach nen Dummy-Objekt übergebe, würde es sich alles aus der Registry holen müsste ich dort immer die Sachen reinpacken, ziemlich aufwendig.

Und zu meiner Bootstrap Instanz, welche aktuell in der Registry steckt.
Wäre es nicht praktisch, wenn man die eigene Bootstrap Klasse als Singleton aufbaut?
Denn es sollte doch eigentlich nur einen Bootstrap Vorgang geben? Keine Ahnung, warum man das eventuell ein zweites mal separat, also als eigene Instanz, brauchen könnte. :-?
nutz Zend_Application ;)

Auf jeden Fall ist das Zend Framework ziemlich komplex und der Einstieg wirklich nicht so leicht. Ich bin mal gespannt, ob ich noch ein paar nette Geheimnisse davon finde. :biggrin:
Ihr dürft nur nicht alles überstürzen, langsam anfangen, während dem Lernen immerwieder neue Baustellen öffnen ist unproduktiv.
Eine Sache fertig machen und dann das andere Problem angehen, und die alten Sachen die man doof gemacht hat (oder wofür es im Zf schon was gibt) ersetzt man dann wieder.
 
nutz Zend_Application ;)

Und wie komme ich immer wieder an meine Zend_Application Instanz? (ohne dann die Registry zu nutzen.. wobei ich dann so langsam nicht mehr weiß wozu es die überhaupt gibt :-?)


Ihr dürft nur nicht alles überstürzen, langsam anfangen, während dem Lernen immerwieder neue Baustellen öffnen ist unproduktiv.
Eine Sache fertig machen und dann das andere Problem angehen, und die alten Sachen die man doof gemacht hat (oder wofür es im Zf schon was gibt) ersetzt man dann wieder.

So schaut es aus ;)
Ich lösche gerne alten Code wenn ich weiß, dass man es anders besser lösen kann. :D
 
Und wie komme ich immer wieder an meine Zend_Application Instanz? (ohne dann die Registry zu nutzen.. wobei ich dann so langsam nicht mehr weiß wozu es die überhaupt gibt :-?)

sry, ich zähle hier leider zu den "Late Adoptern" :)biggrin:), bzgl. Zend_Application weiß ich nicht mehr als ich mal so nen bisschen gelesen habe.
Warum es Zend_Registry gibt? Es gibt viele Arten zu programmieren, gute und schlechte ;)
Und das Registry-Pattern ist nunmal ein annerkanntes Pattern, also warum sollte man es nicht auch implementieren? Irgendwie muss man die Objekte ja auch in den Controller bekommen ;)
nette Lektüre: Registry Pattern, good or bad?
 
Hab mir das Buch von Ralf Eggert jetzt mal bestellt, ich will da jetzt einfach mal mit dem ZF anfangen und was gibts schöneres als nen Buch? ;)
 
Hab mir das Buch von Ralf Eggert jetzt mal bestellt, ich will da jetzt einfach mal mit dem ZF anfangen und was gibts schöneres als nen Buch? ;)
soll ein sehr gutes Buch sein, ich habs mir leider noch net geholt, ich habe noch andere Bücher auf meiner Wunschliste, die Vorrang haben :biggrin:

Und was sagst du dann dazu, wenn ich dir mitteile, dass ich am meisten und schnellsten lerne durch lesen ?
Weshalb ich auch so nen großes Bücherregal habe :biggrin:
Es geht zwar auch nix über Praxis, aber die ganzen Tricks lernt man nicht durch ausprobieren, sondern weil sich jemand die Mühe macht und sie aufschreibt, und die Informationsdichte ist in Büchern eben deutlich höher als Blogs.

Wobei ich Blogs nicht degradieren will :biggrin:
Ich habe auch knapp 60 in meinem Feed-Reader :biggrin:
 
soll ein sehr gutes Buch sein, ich habs mir leider noch net geholt, ich habe noch andere Bücher auf meiner Wunschliste, die Vorrang haben :biggrin:
Ich weiß es nicht genau, aber ich würd sagen du kennst dich verdammt gutem mitem ZF aus, ergo würde dir das Buch nur wenig neues vermitteln (wenn überhaupt). Also würde ich an deiner Stelle das Buch auch nicht so stark gewichten und mir lieber erst andere kaufen ;)