【问题标题】:Passing object to partial() view helper in ZF2将对象传递给 ZF2 中的 partial() 视图助手
【发布时间】:2017-04-23 16:03:09
【问题描述】:

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

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

【问题讨论】:

  • partial viewhelper 的第二个参数应该只是一个数组,您应该能够将对象或您想要的任何东西传递给partial。在部分中,您应该使用键作为变量:$test 以获取部分中的对象。也许您可以添加您尝试过的结果以及如何在部分中调用变量。
  • @Kwido 正如问题中所说,我使用了$this->test,但我也尝试了$test。但两者都不起作用。结果是,您无法访问部分中原始对象的任何属性。我做了一些调试,父视图的$this 和部分视图的$test 都是类类型Zend\View\Renderer\PhpRenderer,一般来说是正确的。但是使用$test->foo 访问部分中的属性不会返回任何内容,而使用$this->foo 在父级中使用相同的属性会返回预期值...

标签: php zend-framework zend-framework2 partials


【解决方案1】:

当您将父 Zend\View\Renderer\PhpRenderer 传递给您的部分时,它将用您的部分的 Zend\View\Renderer\PhpRenderer 覆盖/替换 $test 变量,就像它正在重新使用该类一样。因此,由于您的部分 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']

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    相关资源
    最近更新 更多