2010年1月14日星期四

[fw-mvc] Re: [fw-general] Bootstrap Resource usage in model - best practice advice please

Hey Nick. I was asking myself the same question the other night.

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


没有评论: