Mehrere URLs mit Parametern unter Verwendung von Zend_Controller_Router_Route_Regex in Zend Framework übereinstimmen

8

Ich entwickle einen Rest-Controller mit Zend und ich bin verwirrt mit der Zuordnung von URLs zum Router.

Grundsätzlich habe ich über Zend Router und ich konnte meine urls nicht planen, um die erwähnten routen zu erfüllen.

Dies sind einige meiner URLs, die Routern zugeordnet werden sollten.

  1. Ссылка

  2. Ссылка (param: abc = true)

  3. Liste (param: 123456.xml)

  4. Ссылка (Parameter: 123456, pings.xml)

  5. Zypern (params: 123456, pings. xml, a = 1, b = 2)

  6. Zypern (params: 123456, pings, count.xml)

Ich plane, dass für die URL-Muster 1 bis 3 "Tags" der Controller und für die URL-Muster 4 bis 6 "Pings" der Controller sein sollten.

Jetzt bin ich mir nicht sicher, wie ich die Router so konfigurieren soll, dass die obigen Szenarien funktionieren. Beachten Sie, dass ich diese URLs nicht ändern kann. Ich kann der guten Antwort 100 meiner Reputationsnote anbieten.

    
shasi kanth 01.03.2011, 09:18
quelle

2 Antworten

6

Die ersten zwei URLs können zu einem Router kombiniert werden.

%Vor%

Um die ersten beiden Routen zu unterscheiden, prüfen Sie, ob in Ihrem Tag-Controller der Parameter abc vorhanden ist. Fügen Sie in Ihrem Tag-Controller die Indexaktion hinzu.

%Vor%

Ebenso können die Routen 4 und 5 zu einer Route zusammengefasst werden.

Ich habe für Route 6 erklärt. Für Route 3 können Sie die gleiche Logik verwenden.

%Vor%

Die Parameter können dann wie folgt im Ping-Controller abgerufen werden.

%Vor%

Für Route 5:

%Vor%

Die Parameter (Teil der URL nach?) werden im Router nicht behandelt. Standardmäßig werden sie an Ihren Controller übergeben.

Um einen bestimmten Parameterwert in Ihrer URL zu erhalten, verwenden Sie Folgendes in Ihrem Controller.

%Vor%

Die Logik ist Verwendung (. *) in Ihrer Route und weisen Sie ihnen einen Parameternamen und Zugriff auf sie in Ihrem Controller

    
emaillenin 01.03.2011, 12:40
quelle
4

Hier ist ein Starter für einen Teil eines Algorithmus, der den Controller, die indexierten Parameter und die Erweiterung aus der Anfrage destilliert, die Sie in eine erweiterte Version von Zend_Rest_Route::match() einfügen könnten:

%Vor%

Es ist kaum getestet und daher natürlich kein Produktionsmaterial. Aber es sollte dich beginnen.

Was Ihnen das bis jetzt gibt, ist:
Der Controller
Die Erweiterung
Die indizierten Parameter

Was Ihnen das NICHT gibt, ist:
Die Aktion (post, put, delete usw. Der Algorithmus dafür ist bereits in Zend_Rest_Route::match() )
Die genannten Parameter ( Zend_Controller_Request_Http kümmert sich bereits darum)

BEARBEITEN
Mir ist klar, dass diese Antwort bisher als etwas vage angesehen werden kann. Der Punkt ist, diesen Algorithmus mit dem Algorithmus match() von Zend_Rest_Route zusammenzuführen. Aber dieser obige Code braucht noch viel Aufmerksamkeit; Willst du Module auch wohl berücksichtigen (so wie Zend_Rest_Route ), und vielleicht sogar eine optionale baseUrl (bin mir nicht sicher, wie ZF das intern tatsächlich behandelt).

    
Decent Dabbler 01.03.2011 12:55
quelle

Tags und Links