2010-03-16 6 views
11

J'essaie d'extraire les paramètres GET à partir d'une URL REST ZF. Ce n'est pas la demande actuelle et je ne veux pas appeler l'URL ou exécuter la route, j'ai juste besoin des paramètres. Je cherche une fonction utilitaire comme parse_url(), mais pour le format Zend REST. Y en a-t-il un ou dois-je réinventer la roue?Comment analyser une URL Zend pour les paramètres?

J'ai essayé quelques choses comme créer un nouveau Zend_Controller_Request_Http mais les paramètres ne sont pas remplis. C'est une URL HTTP valide.

Edit: Sur demande, un exemple d'URL Zend:

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

Je suis juste essayer d'obtenir param1 et param2 de cette URL.

Edit # 2: J'ai essayé cela, mais il ne semble pas fonctionner:

$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

Que diriez-vous fournir l'URL? – hobodave

Répondre

8

Que diriez-vous $uri = Zend_Uri::factory($yourUrl)? Voir Zend_Uri.

Edit:
Ah, je vois ce que vous voulez dire maintenant. Dans ce cas, je crois que vous devriez essayer ce que Gordon a suggéré. Exécutez votre URL via la méthode match de votre itinéraire.

Il y a probablement un moyen de récupérer la route du routeur avec quelque chose comme (ne sais pas si):

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

Et puis ne semething comme:

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

.. qui devrait donner vous un tableau de paramètres.

+1

Cela me donne un objet Zend_Uri, mais que puis-je faire avec cet objet pour obtenir les paramètres? getQuery() renvoie false car il recherche uniquement une chaîne de requête standard (? param1 = foo & param2 = bar). – wizzard

+1

Génial. Je viens de changer getRoute ($ name) en getCurrentRoute() et cette solution fonctionne pour moi. Merci beaucoup! – wizzard

+0

+1. supprimer le mien, upvoting ici. c'est beaucoup plus simple. Juste un sidenote mineur: match() remplacera en interne $ yourURL par l'objet de requête actuel s'il ne s'agit pas d'une instance de Zend_Controller_Request_Http pour commencer. – Gordon

8

Si quelqu'un est venu ici pour essayer d'obtenir tous les params (y compris le module/contrôleur/action) à partir d'une URL stockée en tenant compte des itinéraires définis sur votre routes.ini, vous devez:

/** 
* 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(); 
Questions connexes