partialLoop viewhelper 如何在带有 tablegateway 的 zend3 中使用

how can partialLoop viewhelper be used in zend3 with tablegateway

我仍然很难适应 Zend3 框架。在我使用 Zend 1 之前,由于 tablegatewayadapter,它可能仍然是一个理解问题。我只想一起显示 2 个实体,它们是项目 1-n units.So 我必须以某种方式将项目密钥传递给我的 unitarray 以仅获取相关单位。在 Zend1 中,我(在另一个示例中)使用显示 n 实体的部分循环助手实现了这一点,这里是关系 "veranstaltung - docs",相同的想法,其他表。

这是一个片段,展示了我以前在 zend1 中所做的事情:

    $veran=new Application_Model_DbTable_Ribaveranstaltungen();
$documents = new Application_Model_DbTable_Ribadocs();
$select=$veran->select()
->from('riba_veranstaltung')
->order('sort DESC');

$veranstaltung=$veran->fetchAll($select);
foreach($veranstaltung as $v) : 
    $dokument=$documents->getDocumentveranstaltung1($v->id);?>
    <tr>
        <td> <a href="<?php echo $this->url(array('controller'=>'Ribaveranstaltungen',
            'action'=>'index'));?>"><img src="./images/icons/haus.jpg" width="20" height="20" /></a></td>
        <td class="row_0"><?php echo $v->veranstaltung;?></td>
        <td class="row_1"><?php echo $this->partialLoop('/helpers/_docs-row.phtml', $dokument);?></td>
    </tr>
<?php   

    $j=$j+1;
endforeach;?>

如何将其迁移到 zend3。我有几个想法,例如 1.idea:我用我的控制器试过:

public function indexAction()
{
    //'imports' => $this->table->fetchAll(),
    return new ViewModel([
            'projects' => $this->projectTable->fetchAll(),
            'units' => $this->unitTable->fetchAll(),
    ]);
}

我的麻烦来了,怎么用我的方法fetchALLP(project),因为我想把实际的projectkey传给单位,只得到相关的记录

2.idea:我尝试做同样的事情,就像我在 Zend1 中所做的那样。我想在我的视图中初始化我的对象。

$gateway = new Unit();
$units = new UnitTable($gateway);
foreach ($projects as $project) : 
    $unit=$units->fetchAllP($project->ProjectID);?>

这个,我预料到的,不行,因为我真的不明白这个tableadapter的概念。有人可以靠近我的例子向我解释一下吗?

下一个有趣的话题是,是否还有一个 partialloop 助手,或者在这种情况下我是否也必须使用一个新概念?

编辑:显示最新版本

我按照建议更改了 Controller/index 操作,现在看起来:

        $result = $this->unitTable->fetchAll();
    $units = $result->toArray();
            return new ViewModel([
            'projects' => $this->projectTable->fetchAll(),
            'units' => $units,
    ]);

我的索引 phtml(片段):

foreach ($projects as $project) : 
?>
<tr>
<td><?= $this->escapeHtml($project->Projectname) ?></td>
 <td><?= $this->escapeHtml($project->PShortcut) ?></td>
 <td><?= $this->escapeHtml($project->PCI_Number) ?></td>
 <td><?= $this->escapeHtml($project->PDescription) ?></td>
 <td><?= $this->escapeHtml($project->PComponent_Class) ?></td>

<?php   $this->partialLoop('import/unit/index.phtml', $units);   

 endforeach; ?>

我的部分(当然有片段和结尾)

<?php 

foreach ($units as $unit) : 
var_dump(get_object_vars($units));

?>
 <tr> 
<td><?= $this->escapeHtml($this->Unitname) ?></td>

编辑:新体验

我现在是这样实现的,其他的建议完全没有显示部分:

 $this->partialLoop()->setObjectKey('ProjectID');
echo $this->partialLoop('import/unit/unitpartial.phtml', $units);

我得到这个结果:

它显示第一个项目,然后显示所有单元。它用项目数重复单位,但不显示任何其他项目。

无论如何我都更进一步了。我需要更多信息来了解如何 link 实际项目的一部分,例如我需要在视图中:

项目1 单位 x 单位y 项目2 单位abc ...

partialLoop 视图助手中,您可以将数据或变量作为关联数组或实现 toArray() 方法的对象或具有 get_object_vars() 实现的对象传递,以获取其 public属性。

public function testAction()
{
    $result = $this->unitTable->fetchAll();
    $units = $result->toArray();

    return new ViewModel([
        'projects' => $this->projectTable->fetchAll(),
        'units' => $units,
    ]);
}

首先,我们将看到一个示例传递数据数组

在这种情况下,我们将使用 $units 变量,因为它是我们将其转换为数组时的数据数组。

echo $this->partialLoop('/path/to/partial.phtml', $units);

现在您可以将 table 列名称输出为部分模板中的变量,例如,在 /path/to/partial.phtml.

echo $column_name;
// or 
echo $this->column_name;

现在,我们将看到一个示例将对象作为数据.

传递

猜测$projects变量没有转换成数组,是一个对象。您可能希望将其作为对象传递给部分脚本。您可以通过设置 objectKey 属性 来完成此操作,如下所示

$this->partialLoop()->setObjectKey('project');
echo $this->partialLoop('/path/to/partial.phtml', $projects);

现在在您的部分 /path/to/partial.phtml 模板中,输出如下对象属性

echo $this->project->property_name;