While it doesn't hurt to pass in your dependencies from within the controller, it can quickly become tedious. I ended up going with a lazy-load approach so keep my models unit-testable:
public function getCache()
{
if (null === $this->_cache) {
$this->_cache = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('Cache');
}
return $this->_cache;
}
This would allow you to easily create a setter method that your unit tests can use to stub in a black hole cache.
--
Hector
On Mon, Nov 16, 2009 at 11:55 PM, Саша Стаменковић <umpirsky@gmail.com> wrote:
Hi.Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('Cache');But I like$cache = Zend_Registry::get('Zend_Cache);it's shorter.
Regards,
Saša Stamenković
On Tue, Nov 17, 2009 at 8:34 AM, Nick Pack <nick@nickpack.com> wrote:This is probably a dumb question, but I'm looking for a way to call a bootstrap resource from a model (in this case is a Zend_Cache object).
Bootstrap method:
protected function _initCache()
{
$frontendOptions = array(
'lifetime' => 7200, // cache lifetime of 2 hours
'automatic_serialization' => true
);
$cachedir = realpath(/path/to/cache');
$backendOptions = array(
'cache_dir' => $cachedir
);
$cache = Zend_Cache::factory('Core',
'File',
$frontendOptions,
$backendOptions);
Zend_Registry::set('Zend_Cache',$cache);
return $cache;
}
Obviously this is set into the registry so I can access it that way, but I was wondering if this is the best way to do it, or whether there was some way of calling it like you do in a controller:
$this->_cache = $this->getInvokeArg('bootstrap')->getResource('Cache');
or maybe even passing it directly over to the __construct of the model.
Any advice greatly appreciated
没有评论:
发表评论