【问题标题】:What Zend View Partial setObjectKey do?Zend View Partial setObjectKey 做什么?
【发布时间】:2010-07-24 22:51:52
【问题描述】:

我正在阅读有关 zend 视图部分的 zend 框架文档

如果你的模型是一个对象,你可以 想让它作为一个对象传递给 部分脚本,而不是 将其序列化为一个数组 变量。您可以通过设置来做到这一点 的“objectKey”属性 合适的助手:

// Tell partial to pass objects as 'model' variable
$view->partial()->setObjectKey('model');

但这有什么作用。我什么时候使用它以及如何使用它。

【问题讨论】:

    标签: zend-framework


    【解决方案1】:

    我对此不是 100% 肯定,但通过查看源代码和文档可以看出,渲染部分的标准行为是以关联数组的形式将值传递给它。这允许使用数组键将值绑定到变量。

    echo $this->partial('partial.phtml', array ('person' => 'joe');
    
    // in my partial..
    <h1><?php echo $this->person; ?></h1>  //<h1>Joe</h1>
    

    如果您将对象作为第三个参数(即partial('partial.phtml', $myobject);)传递,Zend_View_Partial 将通过toArray() 的自定义实现自动将该对象序列化到关联数组中,或者它只会通过以下方式获取公共属性get_object_vars().

    但是,如果您想传递整个对象,作为一个对象,您需要设置数组键,该键将被转换为一个变量以供部分引用。

    $this->partial()->setObjectKey('myobject');
    echo $this->partial('partial.phtml', $myobject);
    

    这种方法比partial('partial.phtml', array( 'myobject' =&gt; $myobject) 有什么好处,我不确定。或者我可能对文档的解释有误。

    【讨论】:

    • +1 是的,就是这样。为了便于理解,打开Zend/View/Helper/Partial.php 并转到第~91 行,这就是背后的全部逻辑。
    • 我尝试用__toArray() 声明一个类,然后我尝试在有和没有setObjectKey() 的情况下使用它,两者都不起作用(无输出)。 http://pastebin.com/hNR5KxfA 我要传递什么到 setObjectKey() 顺便说一句?我用了“文章”。当我将公共属性与stdClass() 一起使用时,它可以工作http://pastebin.com/TxMLpdrm
    • @jiewming:只是一个小的修正。如果您使用$out = $view-&gt;partial('partial.phtml', array ('person' =&gt; 'joe'); 调用部分,那么我相信您在视图脚本中的用法应该是&lt;?= $this-&gt;person ?&gt;,而不是&lt;?= $person ?&gt;。同样,对于调用$out = $view-&gt;partial('partial.phtml', $myobject);,您在视图脚本中的使用将是&lt;?= $this-&gt;myobject-&gt;someMethod() ?&gt;。我也发现使用 setObjectKey('myobject')array('myobject' =&gt; $myobject) 之间没有区别。
    • 刚刚偶然发现这篇旧帖子。这种方法(据我所知)在使用 $this->partial() 时没有任何好处,但如果您遍历对象数组,则使用 $this->partialLoop() 非常有用。
    【解决方案2】:

    数组中的键(键 => 值)?

    【讨论】:

      猜你喜欢
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 2023-01-27
      • 2014-02-05
      相关资源
      最近更新 更多