我想用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>
我安装了动作助手,但我无法从控制器中使用它。我该如何解决? 有可能吗?
答案 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');
}