我将一个变量传递给一个带有Zend Framework的控制器的视图脚本。我想知道是否有可以预先过滤视图,以便我可以更改视图脚本中检索变量的方式。
例如。在控制器中我有:
$this->view->name = 'Bob';
我认为:
echo $this->name;
哪个工作没问题!我想要的是能够改变它,以便我可以使用:
echo $name;
所以基本上,删除$ this语句。这可能吗?我正在制作一个模板,并让其他设计师使用模板系统,并希望让他们更容易,然后一直输入$ this-> array-> name。
我知道在视图脚本中我可以简单地添加:
$name = $this->name;
但我想在控制器的某个地方做到这一点。
感谢您的建议!
答案 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,然后在您的引导程序中:
这样,您的所有视图都会将其公共属性显示为变量。