我仍然习惯于使用Zend3框架。在我使用Zend 1之前,由于tablegatewayadapter,它可能仍然是一个理解问题。我只想展示2个实体,这将是项目1-n个单元。所以我必须以某种方式将projectkey传递给我的unitarray以获得相关单元。在Zend1中,我用一个显示n实体的partialloop帮助器实现了这个(在另一个例子中),这里是关系" 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概念。有人可以向我解释一下我的例子吗?
下一个有趣的话题是,还是有一个部分循环助手还是在这种情况下我还必须使用新概念?
编辑:显示最新版本
我按照建议更改了我的控制器/索引操作,它现在看起来:
$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);
它显示了第一个项目,然后是所有单位。它以项目数量重复单位,但不显示任何其他项目。
在任何情况下我都会进一步发展。我需要额外的介绍如何将部分链接到实际项目,我需要在视图中例如:
PROJECT1 单位x 单位y 项目2 单位abc ...
答案 0 :(得分:1)
在partialLoop
视图助手中,您可以将数据或变量作为关联数组或实现toArray()方法的对象或具有get_object_vars()
实现的对象传递,以获取其公共属性。
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);
现在,您可以将表列名称输出为部分模板中的变量,例如,在/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;