我有以下动作在我的控制器之一:
public function validateMessageAction() {
$sth = new ViewModel($this->params('params'));
$adServerOutput = $this->forward()->dispatch('Adserver/Controller/Index', array('action' => 'index'));
$sth->addChild($adServerOutput, 'adServerOutput');
return $sth;
}
接下来我有如下模板:
adServerOutput: <?php echo $this->adServerOutput; ?><br><br>
Validate message link clicked<br>
当然,Adserver/Controller/Index和相应的模板也存在,可以调用,一旦调用-显示正确的输出(从其模板)。
不幸的是,我得到的去validateMessage动作后,只是"验证消息链接点击"的文本-没有什么是设置在Adserver/Controller/Index->indexAction()。
知道为什么会这样吗?
额外的信息可能是实际上validateMessageAction()
也通过$this->forward()->dispatch(...)
从不同的控制器触发-可能是这样吗?
EDIT:我也检查过了-即使forward()
调用只做了一次-问题仍然存在…
我真的非常感谢任何提示-坐在这里已经2天了,甚至不知道该进一步检查什么:)
EDIT:附加测试和信息我做了一些额外的测试,发现这里有一些额外的信息:
- adServer/Controller/indexAction有一个布局。指定布局的phtml模板(用于测试目的显示字符串"AdServer布局")
- validateMessageAction有一个布局。指定布局的php模板(用于测试目的显示字符串"validateMessage layout)
现在当我只试着呼叫
$a = $this->forward()->dispatch(...)
即使$a没有被分配或以任何方式使用(只执行此关联)-页面立即开始使用Adserver布局(但仍然没有显示内容)-忽略为validateMessageAction()指定的布局(当然,当我删除该关联时- validateMessageAction()的布局立即返回)。
正如我在文档中所理解的,forward不应该做任何动作,而只会产生包含呈现模块的字符串。
然而,这里可以有一个额外的信息-我使用EdpModuleLayouts -也许这可能是问题的某种来源?
(代表OP发布)
问题是由EdpModuleLayouts -删除布局的Adserver(实际上不应该有一个布局)解决了这个问题。