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

Passing object to partial() view helper in ZF2

我正在尝试将 object 传递给 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 中的单个部分?

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

当您将父级 Zend\View\Renderer\PhpRenderer 传递给您的部分时,它将 overwrite/replaces 带有您部分的 Zend\View\Renderer\PhpRenderer$test 变量,就像它正在重新使用class。因此,由于您的部分 PhpRenderer 没有包含其他变量,因此导致对象为空。

如果您想要来自父级 PhpRender 的变量,请使用以下命令:

$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());

现在在您的 partial.phtml 中:

$this->vars['foo']

为了确认这一点,让您的控制器 return 一些变量 ['foo' => 'bar'] 或设置一个 ViewModel 一些测试变量。现在设置你的部分:

$this->partial('folder/partial.phtml', ['test' => 'abc' 'render' => $this].

并且当您调试或 var_dump() 您的 PhpRenders 变量时,您会看到 $render 包含变量 $test,其值为 abc 而不是键 'foo'以 'bar' 作为其价值。所以看起来 PhpRenderer 正在被重用,所以传递父 PhpRenderer 是不可能的。