Zend Framework - 在多个操作中使用从数据库收集的数据

时间:2010-09-16 04:49:19

标签: php zend-framework

如果我想从数据库中收集一些数据并在控制器的多个操作中使用它,我该怎么做?

目前我只是访问模型并在每个动作中单独检索数据(是的,我知道这是低效的...这就是为什么我要问你们所有人!):

public function indexAction()
{
    $model = $this->_getStuffModel();
    $this->view->results = $model->fetchEntries();
}

public function anotherAction()
{
    $model = $this->_getStuffModel();
    $foo = $model->fetchEntries();
    foreach($foo as $k => $v)
    {
        //manipulate the data
    }
    $this->_helper->json($theoutput);
}

如果我没有在Zend Framework中执行此操作,我只是将它放在构造函数中,然后在对象的任何方法中使用$this->whatever都很好但我不知道如何在ZF中执行此操作(我尝试将它粘贴在init()中,但它不起作用...也许我只是做了一个愚蠢的编码错误,这实际上是正确的地方吗?)。

*编辑:如果我在控制器中有7个动作,并且我在init()方法中放入了访问数据库的代码,那么我将使用每个被调用的动作命中数据库。那不行。

2 个答案:

答案 0 :(得分:3)

每次针对控制器的请求都会调用init()Action。如果你这样做:

protected $model;

public function init()
{
    $this->model = $this->_getstuff();
}

public function indexAction()
{
   echo $this->model->name;
}

比应该工作。

答案 1 :(得分:1)

我认为@ArneRie init()解决方案就是你想要的。 另一个解决方案是使用Zend_Cache缓存Zend_Db_Rowset对象和所有条目,并从缓存中提供它。只有在添加新数据时(并且保存功能可以注册将删除相关缓存条目的观察者),或者每10分钟(并且您检查缓存条目的时间戳)或您的其他业务逻辑,您可以访问数据库选择。