1

コントローラでforward()を実行すると、routeとroute_parametersが失われます。

ParentActionがある場合、それはChildActionに転送されます。チャイルドアクションではreturn $this->render('myTemplate.html.twig', array());、リクエスト属性がネストされます。

したがって、テンプレートがレンダリングされると、代わりに。が表示され$request['attributes']['_route_parameters']ます$request['attributes']['request']['attributes']['_route_parameters']

ChildActionではありますが、私が行う場合$this->getRequest();、階層は正常です。

これはバグですか、それとも私は何か間違ったことをしていますか?

4

3 に答える 3

1

その理由は、symfony が同じルートパラメーターを持っていると想定していないからです。そのため、転送するときは、新しいルートに必要なルート パラメータが同じであっても、それらを再指定する必要があります。

(ちなみに、新しいルートのクエリ パラメータも指定する必要があります。)

public function indexAction($param)
{

    return $this->forward(
        'AppBundle\\Controller\\DefaultController::otherAction',
        array("someOtherParam" => $param),
        $request->query->all() // Causes query string params to be copied
    );
}

// This route has a different parameter.
public function otherAction($someOtherParam) ...
于 2015-03-16T01:39:08.343 に答える
0

考えられる解決策は、転送時に Request を 2 番目のパラメーターとして渡すことです。

$response = $this->forward('MyBundle:MyController:myAction', array('request' => $request));

また、 forward は Symfony2 のコア機能へのショートカットにすぎないため、これはおそらく役立つでしょう。

于 2013-02-28T09:56:37.550 に答える