更改Zend Framework视图脚本中的变量检索方式

时间:2011-12-11 11:41:34

标签: php zend-framework zend-view

我将一个变量传递给一个带有Zend Framework的控制器的视图脚本。我想知道是否有可以预先过滤视图,以便我可以更改视图脚本中检索变量的方式。

例如。在控制器中我有:

$this->view->name = 'Bob';

我认为:

echo $this->name;

哪个工作没问题!我想要的是能够改变它,以便我可以使用:

echo $name;

所以基本上,删除$ this语句。这可能吗?我正在制作一个模板,并让其他设计师使用模板系统,并希望让他们更容易,然后一直输入$ this-> array-> name。

我知道在视图脚本中我可以简单地添加:

$name = $this->name;

但我想在控制器的某个地方做到这一点。

感谢您的建议!

2 个答案:

答案 0 :(得分:2)

我会在前面说,我认为使用视图输出变量的范围来讨论并不是一个好主意。这通过在全局范围内公开视图的内部结构来对抗框架的MVC模式。但是如果你真的坚持这样做,在控制器中,你可以像这样全局分配它们:

$GLOBALS['name'] = $this->view->name;

稍后以$name$GLOBALS['name']访问它们。

注意:取决于填充视图变量的时间与在控制器中分配它们的时间,您可能需要分配引用。

$GLOBALS['name'] = &$this->view->name;

答案 1 :(得分:1)

你的想法很合理,似乎很容易实现。只需将此行添加到模板的开头:

<?php extract(get_object_vars($this)) ?>

通过全局变量将状态传递给视图可能不被某些人视为好主意,但这种方式是安全的,因为 extract 创建局部变量,而不是全局变量。

如果您想重复使用此方法并且不想复制和粘贴,您可以轻松地从Zend_View继承,将此行引入方法(如果我没记错)_run,然后在您的引导程序中:

  • 创建控制器的实例,
  • 获取ViewRenderer操作助手(使用Zend_Controller_Action_HelperBroker的静态方法)
  • 将您的视图实例注入ViewRenderer

这样,您的所有视图都会将其公共属性显示为变量。