zend framework 2,返回JSON模型中视图的渲染内容

时间:2013-06-07 12:44:04

标签: json view return zend-framework2

我正在尝试使用包含当前渲染视图的变量'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,但是并没有用json覆盖普通的HTML视图,但是控制器方法中的相同代码(没有事件)会完全覆盖。 / p>

p.s有没有更好的方法来完成整个概念?

p.p.s如何从控制器中获取当前的视图模板,而不需要使用8行代码?

提前致谢!

Aborgrove

1 个答案:

答案 0 :(得分:1)

您从一个事件返回视图模型我认为这对当前viewmanager视图模型没有任何影响,从viewmanager获取当前视图模型并调用setTerminal(true)。或使用viewmanager

替换创建的jsonmodel