php - Zend framework 2 REST API: establecer parámetros de solicitud
zend-framework zend-framework2 (3)
Soy nuevo en frameworks PHP y construyo REST API en Zend Framework 2. Quiero agregar parámetros a Request
. No pude encontrar el método para agregar parámetros, así que lo haré obteniendo todos los parámetros, añadiéndoles nuevos parámetros y luego estableciendo este nuevo conjunto de parámetros en Request
. Obtengo params usando
$this->params()->fromQuery()
pero, no encuentro ninguna forma de configurar parametros a Request
. ¿Hay algún método disponible para esto?
EDITAR: intenté a continuación. Lo cual no está dando el resultado deseado.
En Module.php:
public function onBootstrap(/Zend/Mvc/MvcEvent $e)
{
$em = $e->getApplication()->getEventManager();
echo "Outside";
$em->attach (MvcEvent::EVENT_DISPATCH, function(MvcEvent $e) {
echo "Inside";
$routeMatch = $e->getRouteMatch();
$routeMatch->setParam("myParam", "paramValue");
});
}
En mi controlador:
echo "myParam : " . $this->params()->fromQuery(''myParam'');
El valor de param es null
cuando lo obtengo. Esto se debe a que el código del controlador se ejecuta primero (donde obtengo el valor de parámetro) y luego se desencadena el evento Dispatch
(donde agrego el parámetro a RouteMatch).
Outside
myParam :
Inside
public function onBootstrap(MvcEvent $e)
{
$em = $e->getApplication()->getEventManager();
$em->attach(MvcEvent::EVENT_ROUTE, function(MvcEvent $e) {
$request = $e->getRequest();
$request->getQuery()->set(''myParam'', ''paramValue'');
});
}
Untestet, pero esto debería funcionar (juega con diferentes constantes de MvcEvent si no es así).
Consulte: https://github.com/zendframework/zf2/blob/release-2.2.5/library/Zend/Http/Request.php#L225 $request->getQuery()
returns y objeto de / Zend / Stdlib / ParametersInterface ( https://github.com/zendframework/zf2/blob/release-2.2.5/library/Zend/Stdlib/ParametersInterface.php)/ParametersInterface.php
Los parámetros de Querystring son simples pares de clave-valor y son propiedades de la instancia Http Uri , no Request ''s itself directamente. Puede usar la API pública de la instancia / Zend / Uri / Http que implementa UriInterface para modificarlos.
Por ejemplo, en tu controlador puedes:
/**
* @var /Zend/Uri/Http Implements UriInterface
*/
$uri = $this->getRequest()->getUri();
$params = $uri->getQueryAsArray();
// Remove a parameter by name
unset($params[''baz'']);
// Add a key-value pair
$params[''foo''] = ''bar'';
$uri->setQuery($params);
Pero esto puede no ser una buena práctica si hablamos de una API de REST. Existen múltiples formas de interactuar con los parámetros de qs, params () es solo un complemento de controlador y hace nuestras vidas más fáciles.
Probablemente no necesite agregar parámetros a la solicitud, y puede lograr los mismos parámetros de adición a routeMatch (es decir, el objeto que representa la ruta que las solicitudes actuales coinciden). Hago esto de vez en cuando.
Lo uso en Module.php, en la función onBootstrap. ACTUALIZACIÓN: adjuntando un código al EVENT_ROUTE
public function onBootstrap(MvcEvent $e) {
$em = $e->getApplication ()->getEventManager ();
$em->attach ( MvcEvent::EVENT_ROUTE, function(MvcEvent $e) {
$routeMatch = $e->getRouteMatch();
$params = //your params, as an array
foreach($params as $key => $value)
$routeMatch->setParam($k, $v);
});
}