我正在使用各种模块和父控制器来保持一致性。
我的父控制器有许多常见操作,每个后续子控制器都需要访问这些操作。我发现很难让这个默认动作呈现正确的视图。
我不想为每个模块添加相同的视图 - 这会打败对象 - 但我希望在某个地方有一个默认视图。
我试过了:
$this->_forward('commonaction', 'baselayout', 'default');
这对我不起作用 - 当它尝试再次处理动作时 - 当我已经填充了我父控制器中所需的变量时。
任何帮助都会很棒。
更新:
澄清我希望能够使用来自不同模块的公共视图。所有示例和解决方案目前都采用通用模块。这对我不起作用。
答案 0 :(得分:7)
我使用:
修复了它$this->_helper->viewRenderer->renderBySpec('foo', array('module' => 'modulename', 'controller' => 'controllername'));
答案 1 :(得分:5)
在您的控制器中使用此语句:
// Render 'foo' instead of current action script
$this->_helper->viewRenderer('foo');
// render form.phtml to the 'html' response segment, without using a
// controller view script subdirectory:
$this->_helper->viewRenderer('form', 'html', true);
来自官方文档http://framework.zend.com/manual/en/zend.controller.actionhelpers.html 的
不可能(据我所知)显示不同模块的视图。此外,官方文件中没有这个问题的痕迹。
答案 2 :(得分:2)
和你一样,我有多个模块,想在不同模块的控制器中渲染任意视图(驻留在一个模块中)。
在尝试了许多方法之后,这是我能够让它工作的唯一方法:
控制器操作:
public function xyzAction()
{
$this->_helper->layout->disableLayout();
$view = new Zend_View();
$view->setScriptPath(APPLICATION_PATH . '/modules/moduleB/views/scripts/abcBlahBlah');
echo $view->render('yadaYada.phtml');
exit;
}
答案 3 :(得分:2)
在您的操作中尝试以下操作:
请参阅以下代码:
// Add a script path to the directory in the other module
$this->view->addScriptPath(APPLICATION_PATH . '/modules/baselayout/views/scripts');
// Tell the viewRenderer to use the view script 'scriptname'
$this->_helper->viewRenderer('scriptname');
答案 4 :(得分:-1)
您可以尝试(Zend Doc):
$View = new Zend_View();
$View->addScriptPath('/path/to/script');