Zend Framework在模块/控制器中渲染不同的视图

时间:2011-10-06 11:49:20

标签: php zend-framework

我正在使用各种模块和父控制器来保持一致性。

我的父控制器有许多常见操作,每个后续子控制器都需要访问这些操作。我发现很难让这个默认动作呈现正确的视图。

我不想为每个模块添加相同的视图 - 这会打败对象 - 但我希望在某个地方有一个默认视图。

我试过了:

$this->_forward('commonaction', 'baselayout', 'default');

这对我不起作用 - 当它尝试再次处理动作时 - 当我已经填充了我父控制器中所需的变量时。

任何帮助都会很棒。

更新:

澄清我希望能够使用来自不同模块的公共视图。所有示例和解决方案目前都采用通用模块。这对我不起作用。

5 个答案:

答案 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');