在zend中的html表中显示数据的最佳方法

Awa*_*wan 3 php database zend-framework

我正在使用zend.有时我必须在HTML表格的网页上显示数据库中的数据.现在我正在做这样的事情:

IndexController的IndexAction中:

$myModel = new Model_MyTable_Object();
$data = $myModel->getAllRecords();
$this->view->show = $data->toArray(); 
Run Code Online (Sandbox Code Playgroud)

并在index.phtml

<table>
 <tr>
  <th>id</th>
  <th>FirstName</th>
  <th>LastName</th>
  <th>Locaion</th>
 </tr>

 <?php

 foreach( $this->show as $data ) {

  echo "<tr>
          <td>" . $data['id'] . "</td>
          <td>" . $data['firstname'] . "</td>
          <td>" . $data['lastname'] . "</td>
          <td>" . $data['location'] . "</td>
        </tr>";
 }
 ?>

</table>
Run Code Online (Sandbox Code Playgroud)

有什么好方法可以在Zend中做到这一点.我已经看到了某个地方,其中为每个数据网格创建了一个PHP类,我们需要它在哪里然后我们在Action中创建该类的实例并在phtml中呈现该对象以显示html表格式的数据,如下所示:

 $this->data->render();
Run Code Online (Sandbox Code Playgroud)

我们应该怎么做 ?任何好的例子,教程或链接.

Mar*_*cin 7

我认为一个好方法是使用partialLoop视图助手.例如,您可以在APPLICATION_PATH/views/scripts/_partials /中创建名为myTableRow.phtml的部分视图文件,如下所示:

<!--APPLICATION_PATH . '/views/scripts/_partials/myTableRow.phtml -->
<tr> 
    <td> <?php echo $this->id;                       ?> </td>
    <td> <?php echo $this->escape($this->firstname); ?> </td>
    <td> <?php echo $this->escape($this->lastname);  ?> </td>
    <td> <?php echo $this->escape($this->location);  ?> </td>
</tr>
Run Code Online (Sandbox Code Playgroud)

然后你的index.phtml如下:

<table>
    <tr>
        <th>id        </th>
        <th>FirstName </th>
        <th>LastName  </th>
        <th>Locaion   </th>
    </tr>
    <!-- I assume that $myModel->getAllRecords();  returns an instance of Zend_Db_Table_Rowset_Abstract --> 
    <?php echo $this->partialLoop('_partials/myTableRow.phtml', $this->show); ?>

</table>
Run Code Online (Sandbox Code Playgroud)

如果你需要在许多视图中执行它,那么你可以创建自己的视图助手来获取数据,构造一个表并将其作为字符串返回给视图.

就目前$this->data->render();而言,恕我直言,这不是一个很好的方式.原因是您需要将数据表示嵌入到模型中.但是,通过使用ZF,您最有可能想要使用其MVC系统.MVC的主要是分离模型,控制器和视图.通过这样做,$this->data->render()你实际上将混合模型与视图.


eme*_*ava 6

创建一个View Helper

<?php
class Zend_View_Helper_DisplayGenericTableHelper extends Zend_View_Helper_Abstract {

    public $view;

    public function setView(Zend_View_Interface $view)
    {
        $this->view = $view;
    }

    public function displayGenericTableHelper(Zend_Db_Table_Rowset_Abstract $rowset,$border=0) {
        $table = "";
        if(count($rowset)>0) {
            $table .= '<table border="'.$border.'"><tr>';
            foreach(array_keys($rowset->current()->toArray()) as $column) {
                $table .= '<th>'.$column.'</th>';
            }
            foreach($rowset as $row) {
                $table .= '</tr><tr>';
                foreach($row->toArray() as $content) {
                    $table .= '<td>'.$content.'</td>';
                }
            }
            $table .='</tr></table>';
           }
           return $table;
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

在你看来

<?php
    echo $this->displayGenericTableHelper($this->points,0);
?>
Run Code Online (Sandbox Code Playgroud)