我想在现有项目中添加一个视图助手路径。为此,我在application.ini中添加了以下行:
resources.view[] =
在我的引导文件中:
$this->bootstrap("view");
$view = $this->getResource("view");
$view->addHelperPath(APPLICATION_PATH . "/../library/MyPath", MyNamespace");
现在我确实可以在我的路径中添加视图辅助对象,所以没有问题。
但是,我在Action Helpers中添加到视图中的变量突然在视图中无法访问。我可以像往常一样在我的布局中检索它们,这样我就知道它们被正确分配了。
我在postDispatch:中的Action Helper中分配了一个变量
$view = $this->getActionController()->view;
$view->myVar = $this->var;
然后在我的布局
Zend_Debug::dump( $this->myVar );
结果在:(字符串)"myVar-contents"
在我看来
Zend_Debug::dump( $this->myVar );
结果:为空
由于这是一个现有的项目,我需要一个通用的解决方案,可以在引导程序或application.ini中使用。
您可以从application.ini向视图添加路径:
resources.view.helperPath.MyPrefix = "/path/to/helpers"
希望这能解决问题。我假设按照您的方式,现有的视图实例会以某种方式被覆盖,从而破坏以前的更改。您可以尝试从frontcontroller获取视图,设置helper路径,然后将其传递回frontcontroller。
经过一些研究,我发现了这一点。
编辑:删除了有关视图变量和布局变量之间差异的文本-请参阅@pieter和@david weinraub的评论
Action Helper的postDispatch在视图渲染之后但在布局渲染之前触发。因此,在操作助手的postDispatch中分配给视图的任何变量在我的视图中都不可用,它们还不存在。
我很好奇为什么只有在主动引导视图时才会出现这种行为?我将不回答这个问题,也许有人可以澄清这一点。