Zend framework 2 REST API:设置Request参数

时间:2013-12-27 11:09:28

标签: php zend-framework zend-framework2 zend-rest

我是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

3 个答案:

答案 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

的对象