Archivo por el 'PHP' Category

Jul 10 2011

ZendFramework y PluginLoader

Publicado por octante bajo PHP

PluginLoader sirve para cargar plugins automáticamente, su uso es muy simple.

Para cargar un plugin necesitamos dos cosas, el repositorio donde está guardado (la ruta hasta el fichero) y el nombre del plugin.

Para cargar el/los repositorio/repositorios (podemos cargar más de un respositorio, éstos serán guardados en forma de array) debemos llamar al método “addPrefixPath”, por ejemplo:

$loader = new Zend_Loader_PluginLoader();
$loader->addPrefixPath ('Zend_View_Helper', 'Zend/View/Helper/')
          ->addPrefixPath ('Frontend_View_Helper', 'application/frontend/views/helpers');

Y para cargar los plugins debemos llamar al método “load”, por ejemplo:

$helperClass = $loader->load('HelperName'); // Con lo que se va a llamar a Zend_View_Helper_HelperName o bien Frontend_View_Helper_HelperName

Otra función que nos puede ser de gran utilidad es “isLoaded”, que nos va a contestar si está cargado o no el plugin, por ejemplo:

if ($loader->isLoaded('HelperName')){   //  En el caso de que ya esté cargado el plugin aprovechamos para llamarlo
   $className = $loader->getClassName('HelperName');
   $adapter = user_call_function (array('HelperName', 'getInstance'));  // Ya tenemos acceso al helper
}

An no hay respuestas

Dec 08 2010

How-to install memcache in ubuntu and Zend Framework cache configuration

Publicado por octante bajo PHP,programación

Install Memcache in ubuntu:

To install memcache in ubutu we need to install it:
sudo apt-get install memcached

Install php memcache module to use it in php scripts:
sudo apt-get install php5-memcache

Edit memcache configuration file /etc/php5/apache2/conf.d/memcache.ini, delete semi-colon in line: “extension=memcache.so”, and restart memcache daemon:

sudo /etc/init.d/memcache restart

To use memcache in Zend Framework we can initialize it in bootstrap file, in this case we use memcache to store routing configuration file.

protected function _initRoutes () {
   $backendType = 'Memcached';
   $backendOptions = array ();
   //$backendOptions = array('cache_dir' => './tmp/'); // Optional
 
   $frontendOptions = array(
      'automatic_serialization' => true,
      'master_files' => array(APPLICATION_PATH . '/configs/router.xml'),
      'lifetime' => 120,                   // cache lifetime of 120 seconds
   );
 
   // Instantiate a caching object for caching the routes
   $cache = Zend_Cache::factory('File', $backendType,
      $frontendOptions,
      $backendOptions
   );
 
   $frontController = Zend_Controller_Front::getInstance();
 
   if(!$router = $cache->load('router')) {
      // Load up .xml file and put the results in the cache
      $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/router.xml');
      $router = Zend_Controller_Front::getInstance()->getRouter();
      $router->addConfig($config, 'routes');
 
      $cache->save($router, 'router');
   } else {
      // Use cached version
      $frontController->setRouter($router);
   }
}

We can use memcache to optimize database connections:

if( ($result = $cache->load('myresult')) === false ) {
   // cache miss; connect to the database
   $db = Zend_Db::factory( [...] );
   $result = $db->fetchAll('SELECT * FROM huge_table');
   $cache->save($result, 'myresult');
} else {
   // cache hit! shout so that we know
   echo "This one is from cache!\n\n";
}

To save html in memcache:

Controller code:

$frontendOptions = array(
   'lifetime' => 30,                   // cache lifetime of 30 seconds
   'automatic_serialization' => false  // this is the default anyways
);
 
$backendOptions = array();
 
$this->view->cache = Zend_Cache::factory('Output',
                                   'Memcached',
                                   $frontendOptions,
                                   $backendOptions);

View code:

if(!$this->cache->start('page_section')) {
      // output as usual:
      echo 'Hello world! ';
      echo time ();
 
      $this->cache->end(); // the output is saved and sent to the browser
}

To remove an item from cache:
$cache->remove('idToRemove');

To remove all items from cache:
$cache->clean(Zend_Cache::CLEANING_MODE_ALL);

And finally, to debug cache, set debug_header to true in frontendOptions:
'debug_header' => true

An no hay respuestas