現在レンダリングされているビューを含む変数 'html' の項目で JsonModel を作成しようとしています。このメソッドではなく、このコードをイベントに追加したいと思います: How to render ZF2 view within JSON response? コントローラーにあるので、イベントに移動してプロセスを自動化したい
私のmodule.config.phpに戦略があります:
   'strategies' => array(
        'ViewJsonStrategy',
    )
コントローラーに setEventManager を設定しました。
    $events->attach(MvcEvent::EVENT_RENDER, function ($e) use ($controller) {
        $controller->setRenderFormat($e);
    }, -20);
これを添付するのに最適なイベントはありますか? RENDER_EVENTの方が良いでしょうか?
ここで、!$this->getRequest()->isXmlHttpRequest() に基づいてページのレンダリングを変更したいと思います (デバッグ用にコメントアウトされています)。
public function setRenderFormat($e)
{
    //if(!$this->getRequest()->isXmlHttpRequest())
    //{
    $controller = $e->getTarget();
    $controllerClass = get_class($controller);
    //Get routing info
    $controllerArr = explode('\\', $controllerClass);
    $currentRoute = array(
        'module' =>  strtolower($controllerArr[0]),
        'controller' => strtolower(str_replace("Controller", "", $controllerArr[2])),
        'action' => strtolower($controller->getEvent()->getRouteMatch()->getParam('action'))
    );
    $view_template = implode('/',$currentRoute);
    $viewmodel = new \Zend\View\Model\ViewModel();
    $viewmodel->setTemplate($view_template);
    $htmlOutput = $this->getServiceLocator()->get('viewrenderer')->render($viewmodel, $viewmodel);
    $jsonModel = new JsonModel();
    $jsonModel->setVariables(array(
        'html' => $htmlOutput,
        'jsonVar1' => 'jsonVal2',
        'jsonArray' => array(1,2,3,4,5,6)
    ));
    return $jsonModel;
    //}
}
奇妙なことに、(またはそうではない) このコードは機能し、$jsonModel を生成しますが、通常の HTML ビューを json で上書きしませんが、コントローラー メソッド内の同じコード (イベントなし) は完全に上書きします。
ps コンセプト全体を実行するためのより良い方法はありますか?
pps 8 行のコードに頼らずに、コントローラー内から現在のビュー テンプレートを取得するにはどうすればよいですか?
前もって感謝します!
アボグローブ