2010-03-16 4 views
11

Ich versuche, die GET-Parameter aus einer ZF-REST-URL zu extrahieren. Es ist nicht die aktuelle Anfrage und ich möchte die URL nicht aufrufen oder die Route ausführen, ich brauche nur die Parameter. Ich suche nach einer Dienstprogrammfunktion wie parse_url(), aber für das Zend-REST-Format. Gibt es eines, oder muss ich das Rad neu erfinden?Wie analysiert man eine Zend URL für Parameter?

Ich habe ein paar Dinge ausprobiert, wie das Erstellen eines neuen Zend_Controller_Request_Http, aber die Parameter werden nicht aufgefüllt. Es ist eine gültige HTTP-URL.

Edit: Auf Wunsch eine Beispiel-URL Zend:

http://localhost/index/index/param1/foo/param2/bar 

So bin ich nur param1 und param2 aus dieser URL zu erhalten versuchen.

Edit # 2: Ich habe versucht, dies aber es scheint nicht zu funktionieren:

$request = new Zend_Controller_Request_Http('http://localhost/home/test/param1/foo/param2/bar'); 
$front = Zend_Controller_Front::getInstance(); 
$route = new Zend_Rest_Route($front); 
var_dump($route->match($request)); 
+0

Wie über die URL bereitstellt? – hobodave

Antwort

8

Wie wäre es $uri = Zend_Uri::factory($yourUrl) '? Siehe Zend_Uri.

Bearbeiten:
Ah, ich sehe, was du jetzt meinst. In diesem Fall glaube ich, dass Sie versuchen sollten, was Gordon vorgeschlagen hat. Führen Sie Ihre URL durch die match Methode Ihrer Route.

Wahrscheinlich gibt es eine Möglichkeit, den Weg vom Router mit so etwas wie (nicht sicher, obwohl) abzurufen:

$route = Zend_Controller_Front::getInstance() 
           ->getRouter() 
           ->getRoute('theRouteName'); 

Und dann tun semething wie:

$params = $route->match($yourUrl); 

.. welche geben sollte Sie eine Reihe von Parametern.

+1

Das gibt mir ein Zend_Uri-Objekt, aber was mache ich dann mit diesem Objekt, um die Parameter zu bekommen? getQuery() gibt false zurück, da nur nach einer Standard-Abfragezeichenfolge gesucht wird (? param1 = foo & param2 = bar). – wizzard

+1

Ehrfürchtig. Ich habe gerade getRoute ($ name) in getCurrentRoute() geändert und diese Lösung funktioniert für mich. Vielen Dank! – wizzard

+0

+1. meine löschen, hier upbooten. Das ist viel einfacher. Nur eine Nebenbemerkung: match() wird $ yourURL intern durch das aktuelle Anfrageobjekt ersetzen, wenn es nicht eine Instanz von Zend_Controller_Request_Http ist, mit der es anfangen soll. – Gordon

8

Wenn jemand kam hier versuchen, alle params zu erhalten (einschließlich Modul/controller/action) aus einer gespeicherten URL die Routen auf Ihrem routes.ini definiert unter Berücksichtigung, sollten Sie:

/** 
* Code kept big just for example purposes 
* Creates a request object, route and injects back the properties parsed 
*/ 
$url = 'http://www.site.com/module/controller/action/param1/test'; 
$request = new Zend_Controller_Request_Http($url); 
Zend_Controller_Front::getInstance()->getRouter()->route($request); 

// Module name 
$request->getModuleName(); 

// Controller name 
$request->getControllerName(); 

// Action name 
$request->getActionName(); 

// All parameters 
$request->getParams(); 
Verwandte Themen