我不久前开始使用Zend Framework 2。
在控制器中,我正在使用发送变量进行查看
return $viewmodel->setVariables(array(
'exampleVariable' => 'exampleValue',
'exampleVariable2' => array(
'variableInArray' => $this->getMacAddress(),
),
));
在我正在做的视图中:
$exampleVariable = $this->exampleVariable
// and
$exampleVariable2 = $this->exampleVariable2
然后直接使用这些变量,这样我就不必每次使用它们时都经历$this
。
正在研究它,并修改了一些东西,当我想调试时,我删除了前面的两行,希望它会中断。
令我惊讶的是,$exampleVariable
和$exampleVariable2
仍然可用。起初,我认为这是一个缓存问题,但事实证明,所有发送到视图的数组键都可以作为变量访问SetVariables()
。
我的问题是,为什么可以在没有$this
的情况下访问它们?
我可能会被警告这个问题,但如果只是出于好奇,这个问题。我不会直接使用这些变量,因为我更喜欢在视图中创建它们,以便我可以注释它们并添加它们各自的变量类型和内容。
看看这里
分配给视图的变量 - 通过视图模型,变量容器,或者只是通过将变量数组传递给render(( - 可以通过三种方式检索:
- 明确地说,通过从 PhpRenderer 中组合的变量容器中检索它们:$this->vars((->varname。
- 作为 PhpRenderer 实例的实例属性:$this->varname。(在这种情况下,实例属性访问只是代理到组合变量实例。
- 作为局部 PHP 变量:$varname。PhpRenderer 在本地提取变量容器的成员。
解释:
PhpRenderer 使用extract
函数将变量提取到函数(渲染(作用域中。这允许在模板中使用$exampleVariable
。此外,PhpRenderer使用魔术__get
函数。因此,如果您调用$this->exampleVariable
它会直接在数据数组中查找。
如果你看看 PHPRenderer 类,特别是 PHPRendered::render((
Zend'View'Renderer'PHPRenderer
您将看到如何使用提取 (http://php.net/extract( 生成视图
这允许在视图/模板内本地访问任何视图变量。