4

私は PHP フレームワークに不慣れで、Zend Framework 2 で REST API を構築していRequestます。パラメータを追加する方法が見つからなかったので、すべてのパラメータを取得し、それらに新しいパラメータを追加してから、この新しいパラメータのセットを に設定し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');

パラメータ値はnull取得時です。これは、コントローラー コードが最初に実行され (param 値を取得する場所)、次にDispatchイベントがトリガーされる (RouteMatch に param を追加する場所) ためです。

Outside
myParam : 
Inside
4

3 に答える 3

3

おそらく、リクエストにパラメーターを追加する必要はなく、同じように routeMatch にパラメーターを追加することもできます (つまり、現在のリクエストが一致するルートを表すオブジェクトです)。私は時々これをします。

私はこれを 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
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

于 2014-01-05T04:32:47.953 に答える