PHP Sammelthread: Zend Framework und alles was dazugehört

Astro hat die ganze schöne Diskussion kaputt gemacht!:ugly:

Schlge oder was? :p :ugly:

Ne, wegen PDT: Das kannst du ganz einfach direkt unter eclipse.org/pdt runterladen, das ist das schöne komplettpaket. Meine alter Version war wohl damals noch nicht so top, jedenfalls hatte ich das wesentlich komplizierter in Erinnerung..

So, zurück zu Zend? Oder doch lieber Gewerbe? ;)
 
Fals wir uns heute nicht mehr lesen, ich wünsche allen einen guten Rutsch und ein gutes Jahr 2009 und das Ihr alle weiter schön gesund bleibt.

Auf das hier noch einige Bekehrt werden zum ZF.:angel::pray:
 
*Doppelpost, entschuldige*

Ohne ice-breakers aufpeppende Texte wird dieser Thread einfach nix :(


ICE! Wir brauchen dich!:ugly:
 
ich kann den Thread nicht nur pushen, wenn sich niemand mit dem Zf beschäftigt ;)

Aber mitreden! :yes::mrgreen:

Nebenbei (ich wollte dazu eigentlich kein Wort mehr verlieren):
Eclipse PDT 2.0 ist fertig ;)

Uiuiui da hab ich gar nicht drauf geschaut aber jetzt *downloading*8)

Leider bleibt mir aber auch nur heute zum testen :( Morgen bis 6. bin ich Ausspannen (was ich u.U. gar nicht will, aber mich fragt ja keiner^^):-?
 
[..]Nebenbei (ich wollte dazu eigentlich kein Wort mehr verlieren):
Eclipse PDT 2.0 ist fertig ;)

Ui...
Habe gerade geschaut ob ich das über das Update System innerhalb von Eclipse updaten kann. Und was sehe ich da? Ich habe Version 2.0.0v20080923-1839
Scheint ja wohl irgendeine Beta zu sein oder so!?
Als Updateadresse habe ich einmal https://download.eclipse.org/tools/pdt/updates/ und einmal https://download.eclipse.org/tools/php/updates/ eingestellt.. Hum.

EDIT:
Ah, unter Installation stehen die URLs ;)

EDIT 2:
Hmm.. Was Astrodan und mir nun nervt ist dieses Drop-Down Menü nachdem man z.B. in einer switch() Anweisung 'nen case geschrieben hat..
Wenn man Enter drückt wird automatisch ein abstract geschrieben.
Gibt es irgendwo in den Einstellungen etwas, wo man dieses abschalten kann?

EDIT 3:
Okay, ich habe die Einstellung gefunden:
Preferences -> PHP -> Editor -> Code Assist -> Enable auto activation
Nur so dürfte das auch theoretisch bei phpDoc usw. fehlen.. Gibt es da noch eine Möglichkeit, dass es da bleibt? Wenn ich nur bei "triggers for PHP" die Zeichen rausnehme, bringt es nichts.
 
Zuletzt bearbeitet:
Also Leute um hier mal a weng leben in den Thread zu bringen mal ne Frage, ich habe jetzt so einige male das Manual durchgewühlt und nu fange ich richtig das entwickeln an mit dem ZF. Nu ist mir aufgefallen das ich in einem Controller gern so eine Wrapper-function hätte wie es die helper haben. Nu habe ich mich gefragt wie man es am besten macht.
Möglichkeiten:
1. forward()
2. redirect()
3. einfach in der einen Funktion, die andere aufrufen, wie es bei den Helpern der Fall ist.


Dann direkt noch eine Frage zu den Helpern und zwar initialisiere ich die gerade im Front_Controller_Plugin mir der addPrefixPath methode vom Loader. Nu is mir aber heute der autoloader wieder in den Sinn gekommen das der zB Zend_Controller_Action selber findet, nu frage ich mich ob das mit dem PrefixPath der richtige Weg ist.

Ist angelehnt an die Beispielapplication Bugapp.
Danke derweil

*edit
Die erste Frage hat sich erledigt, man muss _forward() nutzen um eine Action in einer anderen auszuführen.
 
Zuletzt bearbeitet:
Moin!
Da ich grad mal wieder eine kleine Seite am bauen bin, hab ich mir mal das ZF angeschaut und bin dadurch auf das MVC-Muster gestoßen, doch irgendwie wirft das bei mir Fragen auf:
  • Wohin gehört ein Template-System? Zum View? Bei der Verzeichnisstruktur aus den Tutorial-Videos bleibend, würde ich also in der Datei views/scripts/index/index.phtml z.B. ein Smarty-Objekt erstellen, diesem die vom Controller bekommenen Variablen zuweisen und dann ausgeben lassen? Oder würde ich das Smarty-Objekt im Controller erstellen und die index.phtml durch ein geeignetes Template ersetzen? Käme das ZF damit so ohne weiteres klar?
    Ersteres halte ich für sauberer, aber irgendwie auch doppelt (1. Variablen vom Controller zum View übergeben, 2. Variablen vom View zum Template-System...)
  • Die meisten Projekte, die ich bis jetzt hinter mich gebracht hab, bestanden zum Großteil aus mehr oder weniger statischen Seiten die über ein CMS verwaltet wurden aber auch einigen "Spezial"-Seiten, die etwas anders behandelt wurden. Z.B. findet man unter example.com/unternehmen/geschichte, example.com/unternehmen/standorte etc. Inhalte, die ein Redakteur dort bereitstellt, genauso auch unter example.com/loesungen/mittelstand oder aber auch example.com/impressum, alles einfache "Text"-Seiten, die über das CMS verwaltet werden. Unter example.com/gaestebuch findet sich jedoch ein Gästebuch, das eine eigene, vom CMS getrennte Admin-Oberfläche hat.
    So viel zum Aufbau, jetzt die eigentliche Frage :) Klar ist: Das Gästebuch bekommt einen eigenen Controller, sinnvoll - keine Frage! Aber: Es kann doch nicht Sinn der Sache sein, dass ich auch Controller für unternehmen, loesungen und impressum anlegen muss - schließlich wären es ja dieselben, da in jedem Fall einfach nur der aktuelle Text aus der DB gelesen und angezeigt werden soll. Ich als Programmierer weiß ja auch nicht vorher, welche Seiten später im CMS angelegt werden (vielleicht gibt es irgendwann auch mal example.com/insolvenz - das weiß ich ja zum Zeitpunkt des Programmierens noch nicht).
    Gibt es sowas wie einen "Default"-Controller? Weil einfach Exceptions abfangen und dann ins CMS gucken ist für mich irgendwie nicht sauber (sollen ja schließlich Ausnahmen bleiben und nicht die Regel werden!)...
    Achja, und was ist mit mehreren Ebenen? Z.B. example.com/loesungen/mittelstand/it-anlagen? Das sind doch keine unterschiedlichen Actions oder was auch immer, sondern einfach eine redaktionelle Unterteilung - mehr nicht! Wie passt das ins System?
Genug für's erste :) Ich bin fasziniert, aber verwirrt - zu viel Neues auf einmal!
 
Hi,

zu deinem ersten Punkt (ich denke mal bei Smarty verhält es sich genauso wie beim built-in Template System):
Du erzeugst im Controller deinen View und gibst dann das Template mittels
PHP:
$this->view->render('index');
// edit: das ZF erzeugt in $this->view automatisch eine Zend_View-Instanz
Allerdings rendert bei Default-Einstellungen die indexAction im Controller_Index /viewscriptpath/index/index.phtml

Bei dem Problem, wenn du verschiedene Unterseiten hast, die aber alle ähnlich sind (Überschrift, Text, ...), bietet es sich an einen Article_Controller zu verwenden, der dann für alle Inhalte der o.g. Form zuständig ist.
Möchtest du deine Links unbedingt in deiner Form haben, lässt sich vielleicht mit Routing was machen.
 
Zuletzt bearbeitet:
Bei der Verzeichnisstruktur aus den Tutorial-Videos bleibend, würde ich also in der Datei views/scripts/index/index.phtml z.B. ein Smarty-Objekt erstellen, diesem die vom Controller bekommenen Variablen zuweisen und dann ausgeben lassen?
so ähnlich, wenn du im Controller $this->view->assign() aufrufst, wird die Variable an eine Zend_View-Instanz übergeben.
Der Trick ist nun du tauschst Zend_View gegen ein Smarty-Objekt aus, welches die Zf-Schnittstellen implementiert, im Template arbeitest du dann wie bisher mit Smarty. Google wird dir da viele Möglichkeiten bieten das Zf mit Smarty zu kombinieren, ich habe meine eigene Quick&Dirty-Methode, die ich irgendwann mal austauschen muss ^^
Das Originale Zend_View-Konzept mit direkt PHP nutzen ist auch nicht schlecht, nur so nebenbei ;)


So viel zum Aufbau, jetzt die eigentliche Frage :) Klar ist: Das Gästebuch bekommt einen eigenen Controller, sinnvoll - keine Frage! Aber: Es kann doch nicht Sinn der Sache sein, dass ich auch Controller für unternehmen, loesungen und impressum anlegen muss - schließlich wären es ja dieselben, da in jedem Fall einfach nur der aktuelle Text aus der DB gelesen und angezeigt werden soll. Ich als Programmierer weiß ja auch nicht vorher, welche Seiten später im CMS angelegt werden (vielleicht gibt es irgendwann auch mal example.com/insolvenz - das weiß ich ja zum Zeitpunkt des Programmierens noch nicht).
nein, das ist auch nicht der Sinn ;)


Gibt es sowas wie einen "Default"-Controller? Weil einfach Exceptions abfangen und dann ins CMS gucken ist für mich irgendwie nicht sauber (sollen ja schließlich Ausnahmen bleiben und nicht die Regel werden!)...
nein, das gibt es nicht, aber es gibt andere Wege ;)
Ich zeige dir hier nun einen auf:
Das Standard-Feature eines CMS ist, aus der URL herauszulesen, welcher Artikel angezeigt werden soll und diesen aus der Db zu laden und darzustellen, irgendwie ist das immer der gleiche Prozess.
Also könnte man ja einen Controller bauen, der diese Informationen bekommt, dann die Daten aus der DB ausliest und an den View übergibt, nur wie übernehmen wir die URL-Struktur?
Das Zf hat für soetwas den Router du würdest also für example.com/unternehmen/geschichte eine Route anlegen, die "/unternehmen/geschichte" heisst und dann weiterleitet an einen CMS-Controller mit den beiden Informationen.

Achja, und was ist mit mehreren Ebenen? Z.B. example.com/loesungen/mittelstand/it-anlagen? Das sind doch keine unterschiedlichen Actions oder was auch immer, sondern einfach eine redaktionelle Unterteilung - mehr nicht! Wie passt das ins System?
das ZendFramework ist eben nicht als CMS-Konzipiert wurden, sondern für Programmierung.
Aber auch da hilft dir der Router wieder weiter, du leitest einfach die 3 Informationen (Loesungen, Mittelstand, It-Anlagen) mittels einer Route an deinen CMS-Controller weiter

Du erzeugst im Controller deinen View und gibst dann das Template mittels
PHP:
$view = new Zend_View();
$view->render('index');
View-Objekte werden von dem Zf automatisch erzeugt und sind im Controller unter $this->view erreichbar



solltest du nicht weiterkommen, melde dich einfach nochmal, dann poste ich nochmal nen genaueren Ansatz
 
Ich habe dazu noch zwei schöne Links evtl. helfen die Dir weiter.
Der erste Link ist ein CMS welches mittels ZF entwickelt wurde, das könnte einige Fragen denke ich beantworten.
Und der zweite Link ist zu deiner Smarty-frage nochmal als kleine Ergänzung. Der zweite Beispielcode ist sogar für Smarty ;), kann man aber sicher verbessern.

gruß strolch00
 
Bei dem Problem, wenn du verschiedene Unterseiten hast, die aber alle ähnlich sind (Überschrift, Text, ...), bietet es sich an einen Article_Controller zu verwenden, der dann für alle Inhalte der o.g. Form zuständig ist.
Möchtest du deine Links unbedingt in deiner Form haben, lässt sich vielleicht mit Routing was machen.
Ja ich glaube das ist, was ich für den Fall bräuchte. Diese extreme Kapselung verwirrt mich, wenn man einmal anfängt Manual zu lesen hat man ruckzuck zig offene Tabs, weil alles in eigenen Klassen liegt...das beste wird wohl wieder Learning by Doing sein, mal schauen wann ich dazu komme...

so ähnlich, wenn du im Controller $this->view->assign() aufrufst, wird die Variable an eine Zend_View-Instanz übergeben.
Der Trick ist nun du tauschst Zend_View gegen ein Smarty-Objekt aus, welches die Zf-Schnittstellen implementiert, im Template arbeitest du dann wie bisher mit Smarty. Google wird dir da viele Möglichkeiten bieten das Zf mit Smarty zu kombinieren, ich habe meine eigene Quick&Dirty-Methode, die ich irgendwann mal austauschen muss ^^
Das Originale Zend_View-Konzept mit direkt PHP nutzen ist auch nicht schlecht, nur so nebenbei ;)
Naja, die Diskussion PHP-"Templates" vs. echte Templatesysteme hatten wir doch schon oft genug, oder? Ich hab Smarty mittlerweile echt lieb gewonnen und würde mich nur sehr ungern davon trennen :) Aber dass die Möglichkeit besteht, beruhigt mich sehr. Vor allem weil das bedeutet, dass ich das ganze nicht komplett falsch verstanden hab :ugly:

Also könnte man ja einen Controller bauen, der diese Informationen bekommt, dann die Daten aus der DB ausliest und an den View übergibt, nur wie übernehmen wir die URL-Struktur?
Das Zf hat für soetwas den Router du würdest also für example.com/unternehmen/geschichte eine Route anlegen, die "/unternehmen/geschichte" heisst und dann weiterleitet an einen CMS-Controller mit den beiden Informationen.
Dass war es ja, was ich meinte...ich kann doch schlecht im voraus für alle möglichen Seiten Routen anlegen! Aber dafür gibt's bestimmt sowas wie eine "DefaultRoute" ;)

das ZendFramework ist eben nicht als CMS-Konzipiert wurden, sondern für Programmierung.
Schon klar, dass das ZF kein CMS ist, aber ich denke doch es sollte möglich sein, selbst ein CMS zu schreiben, dass auf das ZF aufbaut :)

Mir reicht's für heute, vielen Dank und gute Nacht!
 
Naja, die Diskussion PHP-"Templates" vs. echte Templatesysteme hatten wir doch schon oft genug, oder? Ich hab Smarty mittlerweile echt lieb gewonnen und würde mich nur sehr ungern davon trennen :) Aber dass die Möglichkeit besteht, beruhigt mich sehr. Vor allem weil das bedeutet, dass ich das ganze nicht komplett falsch verstanden hab :ugly:
ich bin auch ein "Smarty-Jünger" keine Angst ;)
Jedoch, also da werden einem vom Zf schon einige Steine in den Weg gelegt, oder es liegt einfach an meinem schlecht geschriebenen Smarty-Adapter, ich würde dir da dringend empfehlen einen fertigen zu suchen und keinen eigenen zu schreiben, und dann einen zu suchen, der nicht das Interface implementiert sondern direkt von Zend_View abgeleitet wurde

Dass war es ja, was ich meinte...ich kann doch schlecht im voraus für alle möglichen Seiten Routen anlegen! Aber dafür gibt's bestimmt sowas wie eine "DefaultRoute" ;)
Wenn ein Moderator einen Artikel anlegt, dann kannst du doch genau in dem moment auch die Route anlegen, das ist doch kein Problem, da musst du ja nicht in die Zukunft ahnen können.
Default-Routen so wie du sie haben willst, unterstützt das Zf nicht, es gibt ne Default-Route aber die macht etwas anderes.
Du könntest natürlich aber Routen nach folgendem Muster anlegen:
Code:
/:cat1
/:cat1/:cat2
/:cat1/:cat2/:cat3
Aber mit dieser Methode musst du alle möglichen Hierarchien vordefinieren UND das wichtigere, für jeden Controller und jede Action, die nicht mit dem Zf geladen werden soll, müsstest du eine Route erstellen.
Also ich persönlich würde eher den Weg nehmen, wenn ein Moderator nen Artikel schreibt, wird dafür on-the-fly ne Route erzeugt.
 
Ich hab vor längerer Zeit mal was damit gemacht aber nicht so ganz verstanden. Hab dann durch diesen Thread mich mal wieder damit beschäftigt und siehe da, jetzt habs ich doch recht gut verstanden (hoff ich jedenfals).

Ich habe jetzt allerdings ein Problem. Ich benutzte Zend_Translate mit einer tmx Datei. Wenn ich in dieser Datei Umlaute benutzte bekomme ich eine Fehlermeldung von Zend. Wenn ich es in eine <!CDATA[ ]]> einbaue und den HTML Code benutzte funktioniert es. Wenn ich aber einen Button in einer Form beschrieben will habe ich dann statt dem Umlaut eben den HTML Code (z.B. löschen statt löschen :ugly:). Kennt jemand eine Lösung?
 
tmx? da frag mal strolch :biggrin:

spontaner Lösungsansatz: Umlaute klingt immer nach Zeichensatz-Problemen, stell mal das XML-File mit dem Encoding auf UTF-8 und dann auch das tmx-file mit dem Editor deiner Wahl in der UTF-8 Zeichenkodierung speichern
 
Danke, funktioniert :D

Allerdings hab ich ein kleines Problem in Eclipse PDT. Irgendwie steht bei meinen Ordnern im Projekt überall ein "JS". Das führt auch dazu dass ich keine Datei mehr so einfach hinzufügen kann. Immer nur über New->Other.

Dann hat sich auch ein Problem mit dem Ändern des Layouts ergeben. Bisher habe ich:
PHP:
$layout = new Zend_Layout();
$layout->startMvc(array('layoutPath'=>'../application/layouts'));
Zend_Registry::set('layout', $layout);
So wird standardmäßig die layout.phtml benutzt. Funktioniert soweit auch wunderbar. Jetzt habe ich in meinem Controller für den Adminbereich:
PHP:
function init() {
	$layout = Zend_Registry::get('layout');
	$layout->setLayout('admin');
}
Funktioniert nur leider nicht. Es wird trotzdem die layout.phtml benutzt. $layout wird gesetzt bevor der Frontcontroller geladen wird.
 
Allerdings hab ich ein kleines Problem in Eclipse PDT. Irgendwie steht bei meinen Ordnern im Projekt überall ein "JS". Das führt auch dazu dass ich keine Datei mehr so einfach hinzufügen kann. Immer nur über New->Other.
Hast du eventuell Aptana uafgespielt und die Aptana Perspektive offen?
Rechts oben kann man zwischen den aktiven Perspektiven wählen, ansonsten Window -> Open Perspective -> Other -> PHP (default)

Dann hat sich auch ein Problem mit dem Ändern des Layouts ergeben. Bisher habe ich:
PHP:
$layout = new Zend_Layout();
$layout->startMvc(array('layoutPath'=>'../application/layouts'));
Zend_Registry::set('layout', $layout);
So wird standardmäßig die layout.phtml benutzt. Funktioniert soweit auch wunderbar. Jetzt habe ich in meinem Controller für den Adminbereich:
PHP:
function init() {
	$layout = Zend_Registry::get('layout');
	$layout->setLayout('admin');
}
Funktioniert nur leider nicht. Es wird trotzdem die layout.phtml benutzt. $layout wird gesetzt bevor der Frontcontroller geladen wird.
uff, kann ich gerade nicht ganz erklären, ich habe aber Vermutungen.

mach es mal anders:
PHP:
Zend_Layout::startMvc(array('layoutPath'=>'../application/layouts')); // dadurch erstellst du ein Singleton Objekt von Zend_Layout
// ich glaube die Zend_Controller-Helper funktionieren auch nur mit oberem

// und dann
Zend_Layout::getMvcInstance()->setLayout('admin');