Welcome to Abdul Malik Ikhsan's Blog

Zend Framework – Controller Plugin vs Action Helpers

Posted in Tutorial PHP, Zend Framework by samsonasik on January 2, 2011

Zend Framework mempunyai arsitektur Controller yang dapat “me-require” system plugin yang memungkinkan dipanggil pada saat sebelum, sedang, maupun setelah semua action controller berjalan.  Sebut saja routeStartup(), routeShutdown(), dispatchLoopStartup(), preDispatch(), postDispatch(), dispatchLoopShutdown(), mereka adalah event method yang berjalan mulai dari sebelum sampai sesudah action Controller dijalankan. FrontController menggunakan plugin broker sebagai registry, dan plugin broker memastikan event tersebut dipanggil pada saat plugin didaftarkan di FrontController.  Untuk memahami tiap event method, bisa di baca di sini.
Zend Framework juga mempunyai Action Helpers, ia adalah kumpulan fungsi yang bisa dipanggil di action controller manapun. Perbedaan action helpers dengan controller plugin adalah controller plugin otomatis terpanggil pada lifetime controller, sedang action helpers berjalan hanya pada saat dipanggil.
1. Contoh Implementasi Controller Plugin
Misalkan kita ingin mengubah layout default di aplikasi yang kita buat pada saat controller tertentu dipanggil secara otomatis. Kita ingin pengecekan dilakukan oleh controller plugin sebelum controller action dikirim. Contoh kode program bisa dilihat seperti di bawah :

<?php
/**
* Controller plugin untuk layout spesifik pada controller AdminController
* @package Zf_Controlplugin
* @author samsonasik
* @filename library\Zf\Controlplugin.php
*/
class Zf_Controlplugin extends
 Zend_Controller_Plugin_Abstract
{
 public function preDispatch(Zend_Controller_Request_Abstract $request)
 {
 $control =  $request->getControllerName();
 if ($control == 'admin' ){
 Zend_Layout::startMvc(array(
 'layoutPath' => APPLICATION_PATH."/layoutadmin/scripts",
 'layout' => 'layout'
 ));
 }
 }
}


Setelah itu, kita bisa daftarkan plugin di atas di Bootstrap kita :

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

 function _initAutoload()
 {
 $autoloader = new Zend_Application_Module_Autoloader(
 array('namespace'=>'',
 'basePath'=>APPLICATION_PATH
 )
 );

 return $autoloader;
 }

 public function _initPlugins()
 {
 $front = Zend_Controller_Front::getInstance();
//mendaftarkan plugin
 $front->registerPlugin(new Zf_Controlplugin());
 }
}


2. Contoh Implementasi Action Helpers
Sebuah helper bisa diinisialisasi dengan banyak cara, berikut beberapa cara yang bisa digunakan :

// a. menggunakan method getHelper() secara explisit
$flashMessenger = $this->_helper->getHelper('FlashMessenger');
$flashMessenger->addMessage('We did something in the last request');

//b. menggunakan helper broker's  __get()
$flashMessenger = $this->_helper->FlashMessenger;
$flashMessenger->addMessage('We did something in the last request');

Referensi :
http://stackoverflow.com/questions/2463378/zend-framework-controller-plugins-vs-action-helpers
http://framework.zend.com/manual/en/zend.controller.plugins.html
http://framework.zend.com/manual/en/zend.controller.actionhelpers.html
Gambar :
http://static.zend.com/shop/media/catalog/product/cache/1/image/190x/5e06319eda06f020e43594a9c230972d/z/f/zf-training-fundamentals-store-product-page-190px.gif