将视图资源添加到应用程序ini后,布局参数丢失


layout parameters lost after adding view resource to application ini

我想在现有项目中添加一个视图助手路径。为此,我在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中分配给视图的任何变量在我的视图中都不可用,它们还不存在。

我很好奇为什么只有在主动引导视图时才会出现这种行为?我将不回答这个问题,也许有人可以澄清这一点。