2011-10-06 96 views
9

我使用各种模块和父控制器来保持一致性。Zend Framework在模块/控制器中渲染不同的视图

我的父控制器有一系列的后续子控制器需要访问的一些常见操作。我发现很难让这个默认行为呈现一个正确的视图。

我不想为每个模块添加相同的视图 - 这将打败对象 - 但我想有一个默认视图。

我曾尝试:

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

这对我不起作用 - 因为它试图再次处理的动作 - 当我已经填写我的父控制器内所需的变量。

任何帮助将是awesom。

UPDATE:

为了澄清我希望能够使用共同的视图从不同的模块。所有示例和解决方案目前都采用通用模块。这不适合我。

+0

我已经更新了我的答案。 Aurelio在正确的轨道上,但是设置添加脚本路径是在当前模块之外使用视图脚本所必需的。 –

回答

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

这是不可能的(在我所知的)来显示不同的观点模块。除官方文档中没有这个问题的痕迹外。

+0

嘿Aurelio - 感谢这个解决方案的主要问题是,它仍然在我目前所在的同一个模块中寻找视图。这是错误的。我需要能够说我想从模块Y渲染的视图X. – Andy

+0

对不起。我了解同一模块,但不同的控制器。 –

+0

啊好吧我的坏。将相应地更新我的问题。你知道这有可能吗? – Andy

7

我固定它使用:

$this->_helper->viewRenderer->renderBySpec('foo', array('module' => 'modulename', 'controller' => 'controllername')); 
+1

它不接受'module'的值,Zend 1.12 – Herokiller

-1

你可以尝试(Zend Doc):

$View = new Zend_View(); 
$View->addScriptPath('/path/to/script'); 
+0

这实际上并不是OP所要求的。设置脚本路径不会呈现不同的视图。 –

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; 
} 
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'); 
相关问题