Zend framework 网站前端的zend模型
我使用zend db表模型进行后端crud操作。然而,我认为这样的模型对于我的前端数据显示是没有意义的,比如来自不同表或加入不同表的按类别的新闻、新闻和博客小部件等 类bug扩展了Zend_Db_Table_抽象{Zend framework 网站前端的zend模型,zend-framework,Zend Framework,我使用zend db表模型进行后端crud操作。然而,我认为这样的模型对于我的前端数据显示是没有意义的,比如来自不同表或加入不同表的按类别的新闻、新闻和博客小部件等 类bug扩展了Zend_Db_Table_抽象{ protected $_name = 'bugs'; } 建模这种方式非常适合我的后端管理面板crud操作,我如何为前端操作创建模型,任何示例都会受到高度赞赏。感谢我认为您在ZF中询问的是一个视图助手,它从您的模型中获取数据,并允许您将其转储到视图中,而无需在con中进行处
protected $_name = 'bugs'; }
建模这种方式非常适合我的后端管理面板crud操作,我如何为前端操作创建模型,任何示例都会受到高度赞赏。感谢我认为您在ZF中询问的是一个视图助手,它从您的模型中获取数据,并允许您将其转储到视图中,而无需在con中进行处理特罗勒。下面是一个简单的例子:
<?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;
}
}
资历日期:
我是一个领导者:
交付日期:
我是检查员:
管理员登录:
最后,我称之为“局部视图”:
<?php echo $this->partial('_dates.phtml', $this->memberData) ?>
至于DbTable模型对前端没有用处,您可能会感到惊讶。一旦您在DbTable类中正确地建立了表之间的关系,它们所能做的功能就会提升。但是,如果您像大多数人一样,您可能至少会有一层域模型(,)在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...");
}
}
}
我认为在ZF中,您需要的是一个视图助手,它从您的模型中获取数据,并允许您将数据转储到视图中,而无需在控制器中进行处理。下面是一个简单的示例:
<?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;
}
}
资历日期:
我是一个领导者:
交付日期:
我是检查员:
管理员登录:
最后,我称之为“局部视图”:
<?php echo $this->partial('_dates.phtml', $this->memberData) ?>
至于DbTable模型对前端没有用处,您可能会感到惊讶。一旦您在DbTable类中正确地建立了表之间的关系,它们所能做的功能就会提升。但是,如果您像大多数人一样,您可能至少会有一层域模型(,)在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_表
派生的模型,您也可以加入其他表。只需确保关闭完整性检查
代码(未测试)可能如下所示:
class My_Model_News extends Zend_Db_Table
{
// Hate the 'tbl_' prefix. Just being explicit that this is a
// table name.
protected $_name = 'tbl_news';
public function fetchNewsByAuthor($authorId)
{
$select = $this->select();
$select->setIntegrityCheck(false)
->from(array('n' => 'tbl_news'), array('*'))
->join(array('a' => 'tbl_author'), array('n.author_id = a.id'), array('author_name' => 'a.name'))
->order('n.date_posted DESC');
return $this->fetchAll($select);
}
}
然后在控制器中:
$authorId = $this->_getParam('authorId');
$newsModel = new My_Model_News();
$this->view->articles = $newsModel->fetchNewsByAuthor($authorId);
说实话,这是让我对大多数TableGateway方法一窍不通的原因之一,比如Zend_Db_Table
。我发现TableGateway非常适合单表查询,但我发现我的大多数实际情况都需要多表。因此,我最终创建的模型不是绑定到单个表,而是一个表接受一个Zend\u Db\u适配器实例,然后查询/连接他们需要的任何表。或者,我推出更复杂的ORM,如条令。即使使用Zend\u Db\u表
派生模型,也可以连接其他表。只需确保关闭完整性检查
代码(未测试)可能如下所示:
class My_Model_News extends Zend_Db_Table
{
// Hate the 'tbl_' prefix. Just being explicit that this is a
// table name.
protected $_name = 'tbl_news';
public function fetchNewsByAuthor($authorId)
{
$select = $this->select();
$select->setIntegrityCheck(false)
->from(array('n' => 'tbl_news'), array('*'))
->join(array('a' => 'tbl_author'), array('n.author_id = a.id'), array('author_name' => 'a.name'))
->order('n.date_posted DESC');
return $this->fetchAll($select);
}
}
然后在控制器中:
$authorId = $this->_getParam('authorId');
$newsModel = new My_Model_News();
$this->view->articles = $newsModel->fetchNewsByAuthor($authorId);
说实话,这是让我对大多数TableGateway方法一窍不通的原因之一,比如Zend_Db_Table
。我发现TableGateway非常适合单表查询,但我发现我的大多数实际情况都需要多表。因此,我最终创建的模型不是绑定到单个表,而是一个表接受一个Zend\u Db\u适配器
实例,然后查询/连接他们需要的任何表。或者,我推出更复杂的ORM,比如条令。我的意思是我仍然使用相同的DBTable类(用于后端)对于前端数据操作和显示?@Rajendra我想我们正在进行循环讨论。我发布了一个带有dbTable的编辑,该dbTable向控制器和视图提供数据。我的意思是,我是否仍然使用相同的dbTable类(用于后端)对于前端数据操作和显示?@Rajendra,我想我们正在进行循环讨论。我发布了一个带有dbTable的编辑,该dbTable向控制器和视图提供数据。我发现,根据定义的关系,Db_Table在没有大量连接的情况下做了合理的工作。而且Zend_Db从来就不是信条。两个完全不同的动物h不同的目的和范围。@RockyFord:Right on.Zend_Db
并不声称是一个完整的ORM。它的功能很好:TableGateway;-)我承认我从未完全研究过关系功能。我得到的印象是,通过关系获取依赖行集会生成一个单独的查询。因此,获取和n呈现10篇文章(例如作者姓名),然后我会查看一个关于文章的查询,以及另外10个关于相关作者信息的查询。出于这个原因,我经常选择加入。但是如果我都很傻-很有可能!;-),那么我会再给ZDT看一眼。老实说,我还没有分析一个关系电话,所以我不确定。它确实感觉有点重,所以你可能会被拒绝ect关于它的作用。我发现在定义关系的情况下,Db_表在没有大量连接的情况下做了合理的工作。而且Zend_Db从来没有打算成为教义。两种完全不同的动物有着不同的目的和范围。@RockyFord:Right on.Zend_Db
并不声称是一个完整的形式。它的作用很好:TableGatew是的。-)我承认我从来没有完全研究过关系功能。我得到的印象是,通过关系获取依赖行集会生成一个单独的查询。因此,获取并呈现10篇文章(使用作者姓名)