Zend Generic View Helper用于显示任何DB-> fetchAll()结果集

时间:2010-05-18 14:52:31

标签: zend-framework

是否可以编写一个Zend View Helper,它可以将任何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 :: Dump()来查看结果,使用通用视图助手会很方便。

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对象确定列名。

2 个答案:

答案 0 :(得分: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 ?>

改进点:使用partial来保持HTML不受帮助者的影响。

答案 1 :(得分:-1)