ZF2从递归PHP函数中分离HTML


ZF2 Seperate HTML from Recursive PHP function(s)

我试图从Zend框架2内的PHP代码中分离HTML元素,但我没有线索如何解决这个问题/分离。我现在正在回显那些HTML元素,它们完成了这项工作。但是必须有一种方法将HTML从PHP中分离出来,而不是返回HTML元素。

此刻,我做了一个viewhelper,它可以帮助我让我为其他模块生成这个treeMap,因为那些也会使用这个功能,只要这个帮助器是用treeMap给出的。categoryTreeMap包含一个类别(Doctrine 2 ORM)对象的树状图。

这是我目前得到的:

namespace Application'View'Helper;
use Zend'View'Helper'AbstractHelper;
class CategoryTreeMapHelper extends AbstractHelper
{
    public function __invoke($categoryTreeMap)
    {
        echo "<ol class='"sortable'">";
        foreach ($categoryTreeMap as $category) {
            $this->showCategories($category);
        }
        echo "</ol>";
    }
    public function showCategories($category)
    {
        echo "<li><div>" . $category->name . "</div>";
        if (isset($category->childs)) {
            echo "<ol>";
            foreach ($category->childs as $child_category) {
                $this->showCategories($child_category);
            }
            echo "</ol>";
        }
        echo "</li>";
    }
}

如何解决这个问题,有什么建议吗?把HTML从PHP的echo中分离出来。

如果您的helper仅由这两个方法组成,则可以通过使用部分helper

在模板中复制该功能

为treemap容器创建一个局部

// view/partial-treemap.phtml
<ol class="sortable">
    <?php foreach ($this->categoryTreeMap as $category) :
        echo $this->partial('partial-category', array('category' => $category));
     endforeach; ?>
</ol> 

为递归部分(为子部分递归地调用自己)创建一个partial

// view/partial-category.phtml
<li>
    <div><?php echo $category->name; ?></div>
    <?php if (isset($category->childs)) : ?>
    <ol>
        <?php foreach ($category->childs as $child_category) :
            echo $this->partial('partial-category', array('category' => $child_category));
        endforeach; ?>
    </ol>
    <?php endif; ?>
</li>

那么在你的控制器动作视图中你只需要一行

<?php echo $this->partial('partial-treemap', array('categoryTreeMap' => $categoryTreeMap)); ?>