4

我是 PHP 框架的新手,并在 Zend Framework 2 上构建 REST API。我想将参数添加到Request. 我找不到添加参数的方法,所以我将通过获取所有参数来完成,向它们添加新参数,然后将这组新参数设置为Request. 我得到参数使用

$this->params()->fromQuery()

但是,我找不到任何方法将参数设置回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');

参数值是null我得到它的时候。这是因为首先执行控制器代码(我得到参数值)然后Dispatch触发事件(我将参数添加到 RouteMatch)。

Outside
myParam : 
Inside
4

3 回答 3

3

可能您不需要向请求添加参数,您可以实现相同的向 routeMatch 添加参数(即表示当前请求匹配的路由的对象 tha)。我时不时地这样做。

我曾经在 Module.php 的 onBootstrap 函数中执行此操作。更新:将一些代码附加到 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);

    });
}
于 2013-12-30T20:06:24.440 回答
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()只是一个控制器插件,让我们的生活更轻松。

于 2014-01-03T00:18:21.043 回答
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 $request->getQuery() ://github.com/zendframework/zf2/blob/release-2.2.5/library/Zend/Http/Request.php#L225返回和对象 \Zend\Stdlib\ParametersInterface ( https://github. com/zendframework/zf2/blob/release-2.2.5/library/Zend/Stdlib/ParametersInterface.php)/ParametersInterface.php

于 2014-01-05T04:32:47.953 回答