Я думаю, что вы спрашиваете в ZF: View Helper , помощник вида берет данные из ваших моделей и позволяет вывести их в представление без необходимости обрабатывать их в контроллере.Вот простой пример:
<?php
class Zend_View_Helper_Track extends Zend_View_Helper_Abstract
{
/**
*
* @param type $trackId
* @return type object
*/
public function Track($trackId) {
//this model just aggregates data from several DbTable models
$track = new Application_Model_TrackInfo();
$data = $track->getByTrackId($trackId);
return $data;
}
}
помощники представления характеризуются возвратом некоторых данных (объект, строка, массив, логическое значение) и могут использоваться для предоставления данных представлениям и частям.Ниже приведен пример частичного , который использует несколько помощников представления для представления данных в представлении.
<fieldset><legend>Dates and Qualifications</legend>
<table>
<tr>
<td>Birth Date: </td><td><?php echo $this->escape($this->FormatDate($this->bdate)) ?></td>
</tr>
<tr>
<td>Seniority Date: </td><td><?php echo $this->escape($this->FormatDate($this->sendate)) ?></td>
</tr>
</table>
<table>
<tr>
<td>I'm a Lead:</td><td><?php echo $this->escape(ucfirst($this->ToBool($this->lead))) ?></td>
</tr>
<tr>
<td>Lead Date:</td><td><?php echo $this->escape($this->FormatDate($this->ldate)) ?></td>
</tr>
<tr>
<td>I'm an Inspector:</td><td><?php echo $this->escape(ucfirst($this->toBool($this->inspector))) ?></td>
</tr>
<tr>
<td>Admin Login:</td><td><?php echo $this->escape(ucfirst($this->toBool($this->admin))) ?></td>
</tr>
</table>
</fieldset>
и, наконец, я вызываю этот частичный элемент в представлении с помощью:
<?php echo $this->partial('_dates.phtml', $this->memberData) ?>
Насколько модели DbTable бесполезны для внешнего интерфейса, вы можете быть удивлены.После того, как вы правильно установили отношения между вашими таблицами в ваших классах DbTable, функциональность того, что они могут сделать, значительно возрастет.Однако если вы похожи на большинство людей, у вас, скорее всего, будет по крайней мере один уровень моделей доменов ( mappers , service , repository ) между вашими классами DbTable и вашим приложением,
Это модель со связями, единственной целью которой является предоставление данных для построения навигации.
<?php
class Application_Model_DbTable_Menu extends Zend_Db_Table_Abstract {
protected $_name = 'menus';
protected $_dependentTables = array('Application_Model_DbTable_MenuItem');
protected $_referenceMap = array(
'Menu' => array(
'columns' => array('parent_id'),
'refTableClass' => 'Application_Model_DbTable_Menu',
'refColumns' => array('id'),
'onDelete' => self::CASCADE,
'onUpdate' => self::RESTRICT
)
);
public function createMenu($name) {
$row = $this->createRow();
$row->name = $name;
return $row->save();
}
public function getMenus() {
$select = $this->select();
$select->order('name');
$menus = $this->fetchAll($select);
if ($menus->count() > 0) {
return $menus;
} else {
return NULL;
}
}
public function updateMenu($id, $name) {
$currentMenu = $this->find($id)->current();
if ($currentMenu) {
//clear the cache entry for this menu
$cache = Zend_Registry::get('cache');
$id = 'menu_' . $id;
$cache->remove($id);
$currentMenu->name = $name;
return $currentMenu->save();
} else {
return FALSE;
}
}
public function deleteMenu($menuId) {
$row = $this->find($menuId)->current();
if ($row) {
return $row->delete();
} else {
throw new Zend_Exception("Error loading menu...");
}
}
}
Zend_Db_Table_Abstract предоставляет интерфейс для нескольких шаблонов доступа к данным, и вам просто нужно предоставитьбизнес-логика и любой уровень абстракции, который вы хотите.