在ZF2中将对象传递给partial()视图助手

时间:2016-12-08 12:00:40

标签: php zend-framework zend-framework2 partials

我试图将object传递给partial()视图助手。虽然使用普通变量工作正常,但我无法将对象传递给此函数。

例如,在partial:

中使用$this->test时,此工作正常
$this->partial("module/folder/partial.phtml", array(
    "test" => "foo",
));

但使用object执行相同操作将不会导致部分内容:

$this->partial("module/folder/partial.phtml", array(
    "test" => $this,
));

我甚至尝试过使用setObjectKey,也没用过:

$this->partial()->setObjectKey("test");
$this->partial("module/folder/partial.phtml", $this);

有没有办法将object传递给ZF2中的单个部分?

我想这样做,因为我的视图实际上包含了部分需要的许多信息。我可以将所有逐行添加到部分,但这只是开销......

1 个答案:

答案 0 :(得分:1)

当您将父Zend\View\Renderer\PhpRenderer传递给您的部分内容时,它会覆盖/替换部分$test的{​​{1}}变量,就像重新使用该类一样。因此,由于您的部分Zend\View\Renderer\PhpRenderer没有包含其他变量,因此导致对象为空。

如果您希望父PhpRenderer中的变量使用以下内容:

PhpRender

现在在你的partial.phtml中:

$this->partial('folder/partial', ['vars' => $this->vars()->getArrayCopy()]);
// Or so, so you don't need to store the originals within the vars key
$this->partial('folder/partial', $this->vars()->getArrayCopy());

要确认这一点,请让控制器返回一些变量$this->vars['foo'] 或使用一些测试变量设置['foo' => 'bar']。现在设置你的部分:

ViewModel

当您调试或$this->partial('folder/partial.phtml', ['test' => 'abc' 'render' => $this]. PhpRenders变量时,您会看到var_dump()包含值为abc的变量$render而不是带有'bar'的键'foo'作为它的价值。因此看起来PhpRenderer正在被重用,因此传递父$test是不可能的。