ZF渲染动作并在另一个动作中获取html

时间:2012-02-01 17:49:26

标签: zend-framework view frameworks action render

我想用Zend Framework做的是从动作X渲染动作Y并获取html:

示例:

public xAction(){
     $html = some_function_that_render_action('y');
}

public yAction(){
     $this->view->somedata = 'sometext';
}

其中y视图类似于:

<h1>Y View</h1>
<p>Somedata = <?php echo $this->somedata ?></p>

我安装了动作助手,但我无法从控制器中使用它。我该如何解决? 有可能吗?

3 个答案:

答案 0 :(得分:2)

这是一种可能的方法来做你想做的事。

public function xAction()
{
    $this->_helper
         ->viewRenderer
         ->setRender('y'); // render y.phtml viewscript instead of x.phtml

    $this->yAction();

    // now yAction has been called and zend view will render y.phtml instead of x.phtml
}

public function yAction()
{
    // action code here that assigns to the view.
}

除了使用ViewRenderer设置要使用的视图脚本,您还可以调用上面显示的yAction,但是通过调用$html = $this->view->render('controller/y.phtml');来获取html

另请参阅ActionStack helper

答案 1 :(得分:1)

您可以使用控制器中的Action View Helper

public function xAction()
{
    $html = $this->view->action(
        'y',
        $this->getRequest()->getControllerName(),
        null,
        $this->getRequest()->getParams()
    );
}

public function yAction()
{
    // action code here that assigns to the view.
}

它不是很漂亮,但效果很好而且您不必使用$view->setScriptPath($this->view->getScriptPaths());

此助手为yAction()创建一个新的Zend_Controller_Request,因此您可以将自己的参数作为第四个参数或使用$this->getRequest()->getParams()来扩展xAction()的请求参数。

http://framework.zend.com/manual/1.12/en/zend.view.helpers.html#zend.view.helpers.initial.action

答案 2 :(得分:0)

最后我找到了这个“解决方案”,这不是我想要做的,但它有效,如果有人找到了真正的解决方案,请在这里回答。

public function xAction(){
    $data = $this->_prepareData();
    $view = new Zend_View();
    $view->somedata = $data;
    $view->setScriptPath($this->view->getScriptPaths());

    $html = $view->render('controller/y.phtml');
}