2010-03-16 12 views
11

Sto cercando di estrarre i parametri GET da un URL ZF REST. Non è la richiesta corrente e non voglio chiamare l'URL o eseguire il percorso, ho solo bisogno dei parametri. Sto cercando una funzione di utilità come parse_url(), ma per il formato Zend REST. Ce n'è uno, o devo reinventare la ruota?Come analizzare un URL Zend per i parametri?

Ho provato alcune cose come creare un nuovo Zend_Controller_Request_Http ma i parametri non vengono popolati. È un URL HTTP valido.

Edit: Su richiesta, un campione URL Zend:

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

Così sto solo cercando di ottenere param1 e param2 fuori di questo URL.

Edit # 2: ho provato questo, ma non sembra funzionare:

$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

Come di fornire l'URL? – hobodave

risposta

8

Come su $uri = Zend_Uri::factory($yourUrl) '? Vedi Zend_Uri.

Edit:
Ah, capisco quello che vuoi dire ora. In tal caso, credo che dovresti provare ciò che Gordon ha suggerito. Esegui l'url tramite il metodo match del percorso.

probabilmente C'è un modo per recuperare il percorso dal router con qualcosa di simile (non sono sicuro però):

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

e poi fare semething come:

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

.. che dovrebbe dare una serie di parametri.

+1

Mi dà un oggetto Zend_Uri, ma cosa devo fare con quell'oggetto per ottenere i parametri? getQuery() restituisce false perché cerca solo una stringa di query standard (? param1 = foo & param2 = bar). – wizzard

+1

Fantastico. Ho appena cambiato getRoute ($ name) per getCurrentRoute() e questa soluzione funziona per me. Grazie mille! – wizzard

+0

+1. cancellando il mio, inviando qui. questo è molto più semplice. Solo un sidenote minore: match() sostituirà internamente $ yourURL con l'oggetto di richiesta corrente se non è un'istanza di Zend_Controller_Request_Http per iniziare. – Gordon

8

Se qualcuno è venuto qui a cercare di ottenere tutti i params (incluso il modulo/regolatore/azione) da un URL memorizzato considerando i percorsi definiti sui vostri routes.ini, è necessario:

/** 
* 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(); 
Problemi correlati