Ich versuche, URL-basierte Übersetzung in Zend Framework zu implementieren, so dass meine Website SEO-freundlich ist. Dies bedeutet, dass ich zusätzlich zu den Standardrouten URLs wie die unten genannten möchte.
%Vor% Die oben genannten sind diejenigen, mit denen ich gerade Probleme habe; Der Rest sollte in Ordnung sein. Ich habe ein Controller-Plugin hinzugefügt, das einen lang
-Parameter abruft, sodass ich das Gebietsschema und das Übersetzungsobjekt in der preDispatch
-Methode einstellen kann. Hier sind einige meiner Routen (in einer INI-Datei gespeichert):
Wie die Kommentare zeigen, stimmen mehrere URL-Strukturen mit der gleichen Route überein, weshalb meine Anwendung das Format falsch interpretiert. Zum Beispiel werden die folgenden zwei URLs von lang1
route verglichen:
In der ersten URL wird "mymodule" als Modulname verwendet, was korrekt ist. In der zweiten URL wird jedoch "mycontroller" als Modulname verwendet, was ich nicht möchte. Hier möchte ich das "default" Modul und "mycontroller" als Controller verwenden. Gleiches gilt für die vorherige lang2
Route. Daher kann ich nicht unterscheiden, ob die URL die Struktur /en/module
oder /en/controller
hat.
Um dies zu beheben, habe ich mit dem Code unten in meinem Controller-Plugin experimentiert.
%Vor% Das funktioniert gut in den Szenarien, die ich getestet habe, aber dann müsste ich etwas Ähnliches tun, um die lang2
route funktionieren zu lassen (was möglicherweise das Durchsuchen von Verzeichnissen beinhaltet, um die Liste der Controller zu erhalten). Dies scheint nur eine schlechte Lösung zu sein, also wenn es möglich ist, würde ich das alles nur mit Routen erreichen (oder einfachem Code, der nicht so "hacky" ist). Ich könnte auch Routen für jedes Mal machen, wenn ich zum Beispiel /en/controller
möchte, aber das ist ein Kompromiss, dem ich lieber nicht zustimmen würde. Also, wenn jemand weiß, wie man das löst oder einen anderen Ansatz kennt, um dasselbe zu erreichen, bin ich ganz Ohr!
Ich habe Ihr Problem hier reproduziert und kommen Sie mit dem folgenden (nicht mit Konfigurationsdateien):
Grundsätzlich gibt es die Route-Kette für die Anwendung der Spracheinstellungen innerhalb der Standardroute des Moduls. Zur Behebung stellen wir sicher, dass der URI die Sprache enthält, wenn der Benutzer sie ausgelassen hat.
Sie müssen es anpassen, da ich Zend_Registry::get('Zend_Locale')
und Zend_Registry::get('Zend_Translate')
verwende. Ändern Sie sie in die tatsächlichen Tasten Ihrer App.
Wie für die lang Route: [a-z]{2}_?([a-z]{2})?
wird es Sprachen wie meine erlauben: pt_BR
Lass es mich wissen, wenn es für dich funktioniert hat.
Tags und Links php url-routing zend-framework zend-translate