所以我正在研究自己的小MVC框架作为学习练习。它工作得很好,但我希望能够在没有$ this的情况下在视图文件中引用变量。
例如,我有一个实例化视图对象的控制器对象。从控制器我将变量传递给视图,如此
$this->view->foo = "bar";
然后视图对象包含视图的相关代码(例如:myView.phtml)。因此,要在视图文件中访问“foo”,我使用此
echo $this->foo;
但是我想做什么,我不知道这是否可能或者我是否遗漏了一些明显的东西,但我想做的是引用这样的变量
echo $foo;
如果没有我发布整个来源,有人能指出我正确的方向吗?
答案 0 :(得分:1)
您可以编写一些代码来解析您的html视图输入,并自动将您的条目从$ foo或[foo]修改为$ this-> foo。
所以你可以在你的html视图中输入这样的东西:
<p>[foo]</p>
然后让一些视图代码解析文件并将[foo]的所有实例更改为$ this-&gt; foo的值。所以你的输出变成了:
<p>I'm the foo value</p>
或者,您可以使用类似Smarty的内容 - 它会为您执行此操作,并且还有许多其他原因也可以使用它。
答案 1 :(得分:1)
你试过extract吗?您必须添加一个方法将所有变量放入数组中。唯一真正的限制是这使得变量只读。
答案 2 :(得分:1)
如果您希望视图对象中的每个变量都可以在视图中使用,您可以将变量添加到作为数组的视图对象的属性中,然后使用extract()使它们可用:< / p>
$this->view->variables['foo'] = 'bar';
extract($this->view->variables); // now $foo = 'bar';
我不是提取物()的忠实粉丝,但这可以实现您的目标。