protected function cacheCallback($class, $method, $args, Closure $closure)
    {
        $repositoryId = $this->getRepositoryId();
        $lifetime     = $this->getCacheLifetime();
        $hash         = $this->generateCacheHash($args);
        $cacheKey     = $class.'@'.$method.'.'.$hash;

        // Switch cache driver on runtime
        if ($driver = $this->getCacheDriver()) {
            $this->getContainer('cache')->setDefaultDriver($driver);
        }

        // We need cache tags, check if default driver supports it
        if (method_exists($this->getContainer('cache')->getStore(), 'tags')) {
            $result = $lifetime === -1
                ? $this->getContainer('cache')->tags($repositoryId)->rememberForever($cacheKey, $closure)
                : $this->getContainer('cache')->tags($repositoryId)->remember($cacheKey, $lifetime, $closure);

            // We're done, let's clean up!
            $this->resetRepository();

            return $result;
        }

        // Default cache driver doesn't support tags, let's do it manually
        $this->storeCacheKeys($class, $method, $hash);

        $result = $lifetime === -1
            ? $this->getContainer('cache')->rememberForever($cacheKey, $closure)
            : $this->getContainer('cache')->remember($cacheKey, $lifetime, $closure);

        // We're done, let's clean up!
        $this->resetCachedRepository();

        return $result;
    }
protected function cacheCallback($class, $method, $args, Closure $closure)
    {
        $repositoryId = $this->getRepositoryId();
        $lifetime     = $this->getCacheLifetime();
        $hash         = $this->generateCacheHash($args);
        $cacheKey     = $class.'@'.$method.'.'.$hash;

        // Switch cache driver on runtime
        if ($driver = $this->getCacheDriver()) {
            $this->getContainer('cache')->setDefaultDriver($driver);
        }

        // We need cache tags, check if default driver supports it
        if (method_exists($this->getContainer('cache')->getStore(), 'tags')) {
            $result = $lifetime === -1
                ? $this->getContainer('cache')->tags($repositoryId)->rememberForever($cacheKey, $closure)
                : $this->getContainer('cache')->tags($repositoryId)->remember($cacheKey, $lifetime, $closure);

            // We're done, let's clean up!
            $this->resetRepository();

            return $result;
        }

        // Default cache driver doesn't support tags, let's do it manually
        $this->storeCacheKeys($class, $method, $hash);

        $result = $lifetime === -1
            ? $this->getContainer('cache')->rememberForever($cacheKey, $closure)
            : $this->getContainer('cache')->remember($cacheKey, $lifetime, $closure);

        // We're done, let's clean up!
        $this->resetCachedRepository();

        return $result;
    }
protected function cacheCallback ( $ class , $ method , $ args , Closure $ closure ) { $ repositoryId = $ this -> getRepositoryId ( ) ; $ lifetime = $ this -> getCacheLifetime ( ) ; $ hash = $ this -> generateCacheHash ( $ args ) ; $ cacheKey = $ class . '@' . $ method . '.' . $ hash ; // Switch cache driver on runtime if ( $ driver = $ this -> getCacheDriver ( ) ) { $ this -> getContainer ( 'cache' ) -> setDefaultDriver ( $ driver ) ; } // We need cache tags, check if default driver supports it if ( method_exists ( $ this -> getContainer ( 'cache' ) -> getStore ( ) , 'tags' ) ) { $ result = $ lifetime === - 1 ? $ this -> getContainer ( 'cache' ) -> tags ( $ repositoryId ) -> rememberForever ( $ cacheKey , $ closure ) : $ this -> getContainer ( 'cache' ) -> tags ( $ repositoryId ) -> remember ( $ cacheKey , $ lifetime , $ closure ) ; // We're done, let's clean up! $ this -> resetRepository ( ) ; return $ result ; } // Default cache driver doesn't support tags, let's do it manually $ this -> storeCacheKeys ( $ class , $ method , $ hash ) ; $ result = $ lifetime === - 1 ? $ this -> getContainer ( 'cache' ) -> rememberForever ( $ cacheKey , $ closure ) : $ this -> getContainer ( 'cache' ) -> remember ( $ cacheKey , $ lifetime , $ closure ) ; // We're done, let's clean up! $ this -> resetCachedRepository ( ) ; return $ result ; }
Cache given callback.

@param string   $class
@param string   $method
@param array    $args
@param \Closure $closure

@return mixed
Cache given callback .