Quantcast
Channel: J.G. » doctrine
Viewing all articles
Browse latest Browse all 3

Zend_Cache_Frontend_Class verwenden

$
0
0

Caching sollte man generell immer verwenden, wenn es geht ;-).
Eine tolle, aber leider noch wenig verbreitete Variante bei Zend
ist die Frontend_Class.
Dies liegt vlt. auch daran, weil sie im Gegensatz zu anderen weniger dokumentiert ist.
Deshalb zeige ich heute euch mal eine einfache Anwendungsmöglichkeit.

Szenario

Ich will die Sql´s, welche über einen Mapper angesprochen werden cachen.
Damit ich nicht jede einzelne Methode mit der CacheAbfrage ausstatten will,
soll dies gleich für alle Methoden gelten.

Cache erstellen

Der Cache wird über die Factory Methode erstellt und steht dann der Application
zur Verfügung. Als “cached_entity” nehme ich den UserMapper aus dem Admin Module.
Dieser beinhaltet die SQL Funktionen.

    public function init()
    {
    	$user = new Admin_Model_Mapper_UserMapper();
        /* Initialize action controller here */
    	$this->_cache = Zend_Cache::factory('Class', 'File', 
    						array('lifetime' => null, 
    							  'cached_entity' => $user,
    						), 
    						array(
    							'cache_dir' => APPLICATION_PATH . '/../data/cache/class/',
    							'automatic_serialization' => true,
    							)
    						);
    }

Der Mapper

Den Mapper habe ich jetzt mal übersichtlich gestaltet und 2 Methoden implementiert.
Wie ihr seht ist hier nichts, das auf Caching hinweist.

<?php

class Admin_Model_Mapper_UserMapper
{
	
	public function getUserById($id)
	{
		return Doctrine::getTable('Admin_Model_User')->find($id)->toArray();
	}	
	
	public function getAllUsers()
	{
		$query = Doctrine_Query::create()
				 ->select('*')
		    	 ->from('Admin_Model_User u');

		return $query->execute()->toArray();
	}	
	
}

Der Controller

In dem Controller, in welchem wir auch den Cache erstellt haben, befindet sich nun auch der Aufruf
der Methoden und somit die Cacheerstellung.

<?php

class Admin_TenantController extends Zend_Controller_Action
{

    public function init()
    {
    	$user = new Admin_Model_Mapper_UserMapper();
        /* Initialize action controller here */
    	$this->_cache = Zend_Cache::factory('Class', 'File', 
    						array('lifetime' => null, 
    							  'cached_entity' => $user,
    						), 
    						array(
    							'cache_dir' => APPLICATION_PATH . '/../data/cache/class/',
    							'automatic_serialization' => true,
    							)
    						);
    }

    public function indexAction()
    {
        // action body
		$user = $this->_cache->getUserById(1);
		$users = $this->_cache->getAllUsers();
		
		$this->view->user = $user;
		$this->view->users = $users;
		
    }
}

Das war es auch schon. Nun wird beim ersten Aufruf der Seite der Cache erstellt über die __call Methode der Cache-Klasse. Beim erneuten Aufruf werden die Daten direkt aus dem Cache geholt und keine DB abfrage mehr durchgeführt.
Hinweis: Vergesst natürlich nicht die Tabelle und das Verzeichnis für den cache zu erstellen.


Viewing all articles
Browse latest Browse all 3

Latest Images

Trending Articles



Latest Images