Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Languages / C++

Caching Using Zend Framework (1st Step Towards Zero To Hero)

5.00/5 (2 votes)
26 Oct 2014CPOL2 min read 9.5K  
In this blog, we will discuss how to cache your whole project.

In this blog, we will discuss how to cache your whole project. When we run our project, PHP interpreter enters into the public/index.php file and after interpreting the project source code, again it comes out through index.php file.

ppt

As in the above image, we can see index.php is the entry point and exit point so if we will start Caching and end Caching in index.php file, then our whole project will be cached. We will see how it can be possible through demo.

DEMO

1st Step

You should have created project using zend framework. Here, we are using zend framework 1.12 for easy understanding. If you want to install framework and create project, so check these 2 links:

  1. https://www.digitalocean.com/community/tutorials/how-to-install-zend-framework-on-an-ubuntu-12-04-vps
  2. http://framework.zend.com/manual/1.12/en/learning.quickstart.create-project.html

2nd Step

Create a clone of the project from https://github.com/tbiswal/quickstart which we will use for demo.

3rd Step

As we are caching whole project, we will follow #Zend_Cache_Frontend_Output method.

4th Step

Create directory called cache inside public directory and give full read write permission to cache directory.

5th Step

Add the below code in mentioned files:

  1. quickstart/public/index.php

Add this code before $application->bootstrap()->run();

PHP
// auto loader
require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->setFallbackAutoloader(true);

// config
$config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 'production');
$registry = Zend_Registry::getInstance();
$registry->set('config', $config);

// Setup caching option
$frontendOptions = array(
    'lifetime' => 7200, // cache lifetime of 2 hours
    'automatic_serialization' => true
);
$backendOptions = array(
    'cache_dir' => 'cache/' // Directory where to put the cache files
);
$cache = Zend_Cache::factory('Output',
    'File',
    $frontendOptions,
    $backendOptions
);
$registry->set('appCacheObj', $cache);

$appCache = Zend_Registry::get('appCacheObj');

$cacheId = 'myCacheId'.str_replace("/", "_", $_SERVER['REQUEST_URI']);

if(strpos($cacheId, ".php") !== -1) {
    $cacheId = explode(".php", $cacheId)[0];
}

//Clear cache for dynamic page
if($_SERVER['REQUEST_URI'] == "/guestbook/sign") {
    $appCache->remove($cacheId);
}

//Cache start
if($appCache->start($cacheId)) {
    exit;
}

After $application->bootstrap()->run(); add the below line:

PHP
//Cache end
if(!is_null($appCache)){
    $appCache->end();
}

2. Add the below code inside end of the public function save() of models/GuestbookMapper.php file:

PHP
//Clear cache on save action to show new data to user instead of cached data
$appCache = Zend_Registry::get('appCacheObj');
$appCache->clean(Zend_Cache::CLEANING_MODE_ALL);

When you will browse http://quickstart.local/guestbook/sign, you will get the page like below:

ppt2

You can check the cache directory which contains the cached files. After clicking on Sign Guestbook, it will clear the cache first and then it will create new cached files.

FYI: So for your project, you have to clear cache on any save action so that user will get new fetched records, otherwise you can show data from cached records.

After completing all the above steps, when you will browse your project, you will find that each page of your application is cached. Only the cached record will be cleaned if you click on any save action. So enjoy! :)

/*Hope you will love it */

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)