PDA

Vollständige Version anzeigen : Navigation Routing


zf-neuling
31.01.2008, 15:19
Hallo,

würd gern wissen wie Ihr bei euren Projekte die Navigation aufgebaut habt. Sie soll ja in der Administration angelegt werden können, wie macht Ihr das mit der Datenbank, habr Ihr Felder angelegt wie Module, Controller, Action, die dann beim Aufruf an die URL-Helper übergeben werden?

DennisBecker
31.01.2008, 16:38
Ich würde ein PHP-Array erstellen und das mit serialize in die DB schreiben. Wenn du verschiedene Routen verwendest, solltest du generell immer den Namen der Route mit an den URL-Helper übergeben, damit dieser die Route richtig erstellt. Ich bin leider noch nicht weit genug mit meinem neuen Projekt, wo genau dies eine Anforderung sein wird.

jpieper
02.02.2008, 11:16
Ich würde ein PHP-Array erstellen und das mit serialize in die DB schreiben.

Wieso denn das? Machst du generell in jede Tabelle nur eine Spalte mit nem serialisierten Array? Ich find das eher unschön Daten serialisiert in der Datenbank zu Speichern. Wenn du in der Datenbank bist, kannst du die Datensätze nicht pflegen, da du nicht siehst, was drin steht und du musst die neben dem Auslesen aus der Datenbank immer deserialisieren.

Also ich habe auch vor mein Routing in der Datenbank abzulegen, damit ich das im Adminbereich bearbeiten kann. Du musst in der Datenbank Module, Controller, Action, Defaults, vllt. die Router Art (Static, Regexp, Normal, ...) ablegen. Vielleicht sollte man ein Routing dann auch direkt an einer ACL binden. Wäre auch ne nette Idee.

deetee
02.02.2008, 11:53
Also bisher habe ich noch keine Navigation erstellt. Mein erstes ZF Projekt steht aber jetzt kurz bevor. Die Navigation werde ich aber nicht in eine Db legen, stattdessen eine Zend_Config Datei nutzen, die zusätzlich im Cache liegt.

DennisBecker
02.02.2008, 18:15
Das problem bei den Routen ist einfach, dass du unterschiedlich viele "defaults" und "reqs" (requirements) haben kannst. Das ist wiederrum von Route zu Route unterschiedlich, daher würde ich folgende Tabellenstruktur nahelegen (bei Routen, die zur Laufzeit erstellt werden):

Tabelle: Routes / Routing
Spalten:
Name - Primary Key - VARCHAR
Route - Routen-Pfad wie :lang/:module/:controller:/action:/* - VARCHAR oder TEXT
Defaults - array('module' => 'default') - das würde ich serialisieren - TEXT
Requirements - array('lang' => 'de|en') - ebenfalls serialisieren - TEXT

Alle festen Routen, die ich genau kenne wie user/:username würde ich in eine Config-Datei schreiben. Wichtig ist, seine Anforderungen zu kennen, wie deetee zum Beispiel. Da scheinen zur Laufzeit keine weiteren Navigationslinks hinzu zu kommen :)

So kannst du problemlos jeden Fall abdecken.

zf-neuling
03.02.2008, 16:37
Das ist eine gute Idee eine Routing-Tabelle zu erstellen, dann kann man jedem Navigationselement eine eigene Route zuweisen.

DennisBecker
03.02.2008, 20:42
Ja, aber das macht nur Sinn, wenn zur Laufzeit neue Routen dazukommen, sonst würde ich sie wie deetee auch in eine Config-Datei schreiben.

zf-neuling
04.02.2008, 10:30
richtig, bei mir ist es so, dass das system modular aufgebaut ist, d.h. man packt ein neues modul rein, geht in die administration, klickt auf installieren, schwups ein neues modul ist installiert.

mit installiert mein ich, dass es in administration ein neuer menupunkt auftaucht über welchen man das modul nutzen kann. es ist auch wichtig dass die routen auch mit installiert werden, da man nicht an die bootstrap datei rankommt.

man könnte auch bei modulinstalation eine xml oder ini config datei mit routen erstellen, wäre auch denkbar