2010-03-16 12 views
11

Estoy tratando de extraer los parámetros GET de una URL REST ZF. No es la solicitud actual y no quiero llamar a la URL ni ejecutar la ruta, solo necesito los parámetros. Estoy buscando una función de utilidad como parse_url(), pero para el formato Zend REST. ¿Hay uno, o tengo que reinventar la rueda?¿Cómo se analiza una URL de Zend para parámetros?

He intentado algunas cosas como crear una nueva Zend_Controller_Request_Http pero los parámetros no se están llenando. Es una URL HTTP válida.

Editar: A petición, una dirección URL Zend muestra:

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

Así que estoy tratando de obtener param1 y param2 de esta URL.

Edición # 2: He intentado esto pero no parece funcionar:

$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

¿Qué hay de proporcionar la URL? – hobodave

Respuesta

8

¿Qué tal $uri = Zend_Uri::factory($yourUrl) '? Ver Zend_Uri.

Editar:
Ah, ya veo lo que quieres decir ahora. En ese caso, creo que deberías probar lo que Gordon sugirió. Ejecute su url a través del método match de su ruta.

Probablemente es una manera de recuperar la ruta desde el router con algo como (no estoy seguro de que):

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

y luego hacer semething como:

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

.. que debe dar usted una matriz de parámetros.

+1

Eso me da un objeto Zend_Uri, pero ¿qué hago con ese objeto para obtener los parámetros? getQuery() devuelve falso porque solo busca una cadena de consulta estándar (? param1 = foo & param2 = barra). – wizzard

+1

Impresionante. Acabo de cambiar getRoute ($ name) para getCurrentRoute() y esta solución funciona para mí. ¡Muchas gracias! – wizzard

+0

+1. eliminando el mío, votando aquí. esto es mucho más sencillo. Solo una pequeña nota al margen: match() reemplazará internamente $ yourURL con el objeto de solicitud actual si no es una instancia de Zend_Controller_Request_Http para empezar. – Gordon

8

Si alguien vino aquí tratando de conseguir todos los parametros (incluyendo módulo/controlador/acción) de una URL almacenada teniendo en cuenta las rutas definidas en sus routes.ini, usted debe:

/** 
* 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(); 
Cuestiones relacionadas