0

不久前我开始使用 Zend Framework 2。

在控制器中,我发送变量以查看使用

    return $viewmodel->setVariables(array(
                'exampleVariable' => 'exampleValue', 
                'exampleVariable2' => array(
                    'variableInArray' => $this->getMacAddress(),
                ),
    ));

在我正在做的视图中:

$exampleVariable = $this->exampleVariable
// and 
$exampleVariable2 = $this->exampleVariable2

$this然后直接使用这些变量,这样我每次使用它们时都不必经历。

我正在研究它,并修改了一些东西,当我想调试时,我删除了前两行,希望它会中断。

令我惊讶的是,$exampleVariableand$exampleVariable2仍然可用。起初,我以为这是一个缓存问题,但事实证明,所有发送到视图的数组键都SetVariables()可以作为变量访问。

我的问题是,没有 怎么可能访问它们$this

我可能会被警告这一点,但这个问题只是出于好奇。我不会直接使用变量,因为我更喜欢在视图中创建它们,这样我就可以评论它们并添加它们各自的变量类型和东西。

4

2 回答 2

1

看看这里

分配给视图的变量——通过视图模型、变量容器,或者只是通过将变量数组传递给 render()——可以通过三种方式检索:

  • 明确地,通过从 PhpRenderer 中组成的变量容器中检索它们:$this->vars()->varname。
  • 作为 PhpRenderer 实例的实例属性:$this->varname。(在这种情况下,实例属性访问只是代理到组合的变量实例。)
  • 作为本地 PHP 变量:$varname。PhpRenderer 在本地提取变量容器的成员。

说明:

PhpRenderer 使用extract函数将变量提取到函数(渲染)范围内。这允许$exampleVariable在模板中使用。此外,PhpRenderer 使用了魔法__get功能。因此,如果您调用$this->exampleVariable它,则直接在数据数组中查找。

于 2013-08-13T11:10:07.213 回答
1

如果你看一下 PHPRenderer 类,特别是 PHPRendered::render()

Zend\View\Renderer\PHPRenderer 

您将看到如何使用提取 ( http://php.net/extract )生成视图

这允许在视图/模板内本地访问任何视图变量。

于 2013-08-13T10:58:31.837 回答