8

パラメータを必要とするFoo Controllerに Action メソッドがあります。

public function fooAction($one, $two) {
    $a = one;
    $b = $two;
}

そして、 Boo Controllerの他のメソッドからそのメソッドに転送する必要があります。そして、これらのパラメーターの 1 つは参照パラメーターである必要があります。マニュアルにある唯一の例は次のとおりです。

$result = $this->forward()->dispatch('Boo\Controller\Boo', array('action' => 'boo'));

追加のパラメーターはありません。しかし、彼らは次のように書いています。

$params は、この特定のリクエストのために RouteMatch オブジェクトを表示するためのパラメーターのオプションの配列です。

だから、私は試しました:

$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
                                                      'action' => 'boo',
                                                      'one' => &$one,
                                                      'two' => $two,
                                                 ));

しかし、うまくいきません。

追加のパラメーターを転送コントローラーに渡す方法はありますか?

更新:

これらも機能しません:

$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
                                                      'action' => 'boo',
                                                      'params' => array(
                                                          'one' => &$one,
                                                          'two' => $two,
                                                     )));


$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
                                                      'action' => 'boo',
                                                      'options' => array(
                                                          'one' => &$one,
                                                          'two' => $two,
                                                     )));

更新 2:

forward必要な機能 (プラグインでパラメーターを渡す) をまだ取得できませんが、他の解決策を見つけました。forwardプラグインを呼び出す前に、Requestオブジェクトに変数を設定し、後で Boo\Controller\BooControllerbooアクションで変数forwardを取得します。Request

// in Foo::fooAction
$this->getRequest()->one = &$one;
$this->getRequest()->two = $two;
$result = $this->forward()->dispatch('Boo\Controller\Boo', array('action' => 'boo'));

// in Boo::booAction
$a = $this->getRequest()->one;
$b = $this->getRequest()->two;

ばかげた解決策です。Ajax リクエストでは機能しません。forward プラグインでパラメーターを渡す方法にまだ興味があります。または、 booActionでそれらを取得する方法かもしれません。Requestで渡すと には何もないからforwardです。

UPD 3 および最終版:

forwardプラグインで渡すパラメーターを非表示にすることを決定した場所を最終的に見つけました。彼らはそれらをRouteMatchオブジェクトに入れました。

- パラメータを隠した場所を推測してみてください...ああ、そうです、それらは にRouteMatchあり、もちろんそこにあります。

そしてforward、マニュアルのプラグインセクションには何も情報がありません!

パラメータを取得するには、 my でこれを行う必要がありますBooController::booAction:

$param = $this->getEvent()->getRouteMatch()->getParam('nameOfParam');
4

5 に答える 5

12

params プラグインを使用しないのはなぜですか?

これは私のために働く:

public function indexAction() {

        $object = new SomeObject();

        return $this->forward()->dispatch('Application\Controller\Index', [
                'action'     => 'show',
                'myObject'   => $object,
        ]);
    }

public function showAction() {

        $object = $this->params('myObject');

        var_dump($object);

        return [];
}
于 2013-12-07T19:27:52.117 に答える
8

コンテナ クラスを作成し、両方のコントローラで使用できます

module.conf で

public function getServiceConfig()
{
    return array(
        'invokables' => array(
            'my_handy_container'        => 'path\container_class_name',
        )
    );
}

両方のコントローラーでゲッターを作成します。

public function getMyHandyContainer()
{
    if (!$this->myHandyContainer) {
        $this->myHandyContainer = $this->getServiceLocator()->get('my_handy_container');
    }
    return $this->myHandyContainer;
}

そして、次を使用して呼び出します。

$myContainer = $this->getMyHandyContainer()->myHandyContainer;
$myContainer->foo = 5; // set something

forward を使用して変数を渡す ZF2 の方法

渡すメソッドで次のことを行います。

return $this->forward()->dispatch('controller_name', [
    'action' => 'whatever',
    'varname' => $value,
    'varname2' => $value2
]);

呼び出されたコントローラー メソッドで、次の操作を行います。

$param2 = $this->params()->fromRoute('varname2',false);
于 2012-12-08T10:35:49.040 に答える
2

自分に合った別のオプションを追加すると思いました。

パラメータを単純に forward 関数に直接渡し、routeMatch 関数を使用して反対側でそれらにアクセスできます。

return $this->forward()
            ->dispatch('Module\Controller\Foo', array(
                                            'action' => 'bas', 
                                             'id' => 6)
                                              );

このメソッドでFoo Controller、basActionに渡し、次のコードを使用して id パラメータにアクセスできます。

$myParam = (int) $this->getEvent()->getRouteMatch()->getParam('id');

これがあなたの要件を満たしているかどうかはわかりませんが、私にとってはうまくいきます。

于 2014-02-05T21:51:48.640 に答える
1

質問をありがとう、私を大いに助けました。forward()->dispatch(...) に渡されるすべてのパラメーターを取得する簡単な方法を見つけました。コントローラーのアクション メソッドで:

$params = $this->params()->fromRoute();

$data として forward()->dispatch($controllerName, $data) に渡された配列 $data を返します。

于 2013-12-16T19:11:18.670 に答える