这不是应该在控制器中完成的事情。它应该在模型中处理。模型提供数据,在这种情况下是客户列表或客户树。只有模型应该提供该数据。您要完成的实际上是一种缓存形式。您可以在模型或应用程序内部和外部以多种不同方式缓存该数据。
您可能想从探索如何在模型中实现身份映射开始。
class someBaseMapper
//an identity map can be as simple as a protected class variable with accessors
protected $map = array();
/**
* Set value and name of entity in identity map.
*
* @param string $id
* @param object $entity
*/
protected function setMap($id, $entity)
{
$this->map[$id] = $entity;
}
/**
* Get value of entity id from identity map.
*
* @param string $id
* @return string
*/
protected function getMap($id)
{
if (array_key_exists($id, $this->map)) {
return $this->map[$id];
}
}
然后使用您的地图:
//later in the same mapper
public function findById($id)
{
//check map requested id
if ($this->getMap($id)) {
return $this->getMap($id);
}
//if no map match
$select = $this->getGateway()->select();
$select->where('id = ?', $id);
$row = $this->getGateway()->fetchRow($select);
//create entity
$entity = $this->createEntity($row);
//add new entity to map
$this->setMap($row->id, $entity);
return $entity;
}
您也可以查看Zend_cache以获取数据库或页面缓存。还有一些您可能会感兴趣的可用于 PHP 的外部缓存工具。