我是PHP框架的新手,并在Zend Framework 2上构建REST API。我想将params添加到Request
。我找不到添加params的方法所以我会通过获取所有params然后向它们添加新的params然后将这组新的params设置为Request
来实现。
我使用
$this->params()->fromQuery()
但是,我找不到任何方法将params设置回Request
。有没有可用的方法?
编辑:我在下面尝试过。这没有给出理想的结果。
在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");
});
}
在我的控制器中:
echo "myParam : " . $this->params()->fromQuery('myParam');
当我得到它时, Param值为null
。这是因为首先执行控制器代码(我得到参数值),然后触发Dispatch
事件(我在其中添加param给RouteMatch)。
Outside
myParam :
Inside
答案 0 :(得分:3)
可能您不需要在请求中添加参数,并且您可以为routeMatch实现相同的添加参数(也就是说,该对象表示当前请求匹配的路径)。我时不时地这样做。
我用它在onBootstrap函数的Module.php中完成。 更新:将一些代码附加到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);
});
}
答案 1 :(得分:0)
Querystring参数只是简单的键值对,它们是Http Uri实例的属性,而不是Request本身的属性。您可以使用实现UriInterface的\ Zend \ Uri \ Http实例的公共api来修改它们。
例如,在您的控制器中,您可以:
/**
* @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);
但如果我们谈论REST api,这可能不是一个好习惯。有多种方法可以与qs参数进行交互,params()只是一个控制器插件,让我们的生活更轻松。
答案 2 :(得分:0)
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,但这应该可行(如果没有,可以使用不同的MvcEvent常量)。
请参阅:https://github.com/zendframework/zf2/blob/release-2.2.5/library/Zend/Http/Request.php#L225
$request->getQuery()
返回\ Zend \ Stdlib \ ParametersInterface(https://github.com/zendframework/zf2/blob/release-2.2.5/library/Zend/Stdlib/ParametersInterface.php)/ParametersInterface.php