2010-05-18 52 views
3

是否可以编写一个Zend View Helper来将任何fetchAll()操作的结果集呈现为泛型表?Zend Generic View Helper用于显示任何DB-> fetchAll()结果集

我的模型代码看起来像这样

class Model_DbTable_XWZ extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'xwz'; 
    protected $_primary = 'id'; 

    public function getA() 
    { 
     $sql = $this->select() 
     .... 
     return $this->fetchAll($sql); 
    } 

    public function getB() 
    { 
     $sql = $this->select() 
     ...... 
     return $this->fetchAll($sql); 

而是使用Zend_Debug ::转储()来查看结果,这将是得心应手地使用一个通用的视图助手。

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($result) 
    { 
     ....??   
    } 
} 

东西像但我不知道如何确定$ result对象的列名称。

回答

4

您可以使用功能Zend_Db_Table_Row_Abstract::toArray(),就像这样:

// in view helper 
public function displayGenericTableHelper(Zend_Db_Table_Rowset_Abstract $rowset) { 
    $table = '<table><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>'; 
     } 
    } 
    return $table.'</tr></table>'; 
} 

使用案例:

// in a view 
<?= $this->displayGenericTableHelper($this->model_data) ?> 

替代电话:

// in controller 
$model_data = $your_model->getA(); 
$view->your_table = $view->displayGenericTableHelper($model_data); 

// in view: 
<?= $this->your_table ?> 

的改进点:使用部分保持HTML出于你的帮手。

+0

我不知道,你可以从控制器调用视图助手 '$视图 - > your_table = $视图 - > displayGenericTableHelper($ model_data);'。 – emeraldjava 2010-05-19 12:19:50

+0

@emeraldjava:这是神奇的:) – chelmertz 2010-05-19 12:35:57