Sistem Zend_Controller di rancang ringan, modular dan mudah untuk dimodifikasi. Rancangan yang minimalist memberikan kemudahan dan kebebasan user untuk membangun sebuah sistem yang terstruktur dengan mengikuti aturan Zend_Controller sehingga didapatkan kesamaan konvensi penamaan dan keseragaman dalam penulisan kode. Gambar berikut ini menggambarkan alur kerja dan penjelasan yang menggambarkan dari setiap detil yang dilewatinya.
Gambar 1. Pola Kerja Zend_Controller_Action.
Alur kerja dari Zend_Controller mengimplementasikan beberapa komponen diantaranya:
Zend_Controller_Front yang mengatur keseluruhan alur proses dari system Zend_Controller. Hal ini menggambarkan pola dari FrontController. Zend_Controller_Front juga mengatur seluruh proses request yang diterimanya dari server dan bertanggungjawab penuh untuk mengirimkan seluruh request tersebut kepada ActionController (Zend_Controller_Action).
Zend_Controller_Request_Abstract (sering direferensikan sebagai Request Object), mewakili lingkup request dan penyediaan method untuk configurasi, pemanggilan controller, penamaan action dan beberapa parameter request. Penambahan ini menentukan ada atau tidaknya suatu Action yang isinya terkirim terhadap Zend_Controller_Dispatcher. Perluasan fungsi terhadap abstrak request object dapat digunakan sebagai enkapsulasi seluruh lingkup request. Membolehkan router untuk mengambil informasi dari lingkup request untuk pengaturan controller dan penamaan Action.
Zend_Controller_Request_Http digunakan by default oleh system, yang menyediakan hak akses terhadap seluruh lingkup HTTP request.
Zend_Controller_Reuter_Interface digunakan untuk mendefinisikan routers. Routing adalah suatu proses yang dilakukan oleh lingkup request untuk menentukan controller mana dan Action dari controller tersebut yang seharusnya menerima perintah request. Controller, Action dan parameter kondisi disiapkan kedalam object request yang kemudian diproses oleh Zend_Controller_Dispatcher_Standard. Routing hanya terjadi sekali, disaat perintah request diterima dan disaat controller pertama mengirimkan perintah.
Zend_Controller_Router_Rewrite mengambil informasi akhir dari URI yang telah terspesifikasi dalam Zend_Controller_Request_Http yang diramu kedalam controller, action dan basis parameter dalam informasi yang tercantum dalam URL. Sebagai contoh URL berikut http://localhost/foo/bar/key/value akan diterjemahkan menjadi foo_Controller yang didalamnya ada bar_Action dan mempunyai parameter key dengan nilai value.
Zend_Controller_Dispatcher_Interface digunakan untuk mendefinisikan dispatcher. Dispatching adalah proses pengambilan controller dan action dari object request dan mendelegasikannya kedalam suatu file atau class controller dan method action didalam controller tersebut. Jika controller atau action yang dituju tidak ada, maka akan otomatis diarahkan ke controller dan action default. Proses dispatching sebenarnya terdiri atas instansiasi class controller dan pemanggilan method action dalam class tersebut. Tidak seperti routing yang terjadi hanya sekali, proses ini dapat terjadi berulang. Jika object request status mengalami setting ulang dalam beberapa titik. Maka perulangan akan berlanjut, mengambil informasi action mana saja yang saat itu sedang aktif dalam object request. Disaat perulangan menemukan status true (Boolean) dalam object request makan proses otomatis akan menghentikan perulangan jika sudah menemukan status true.
Zend_Controller_Action adalah komponen dasar. Setiap controller adalah suatu class yang meng-extends class Zend_Controller_Action dan didalamnya terdiri dari satu atau beberapa method Action.
Zend_Controller_Response_Abstract mendefinisikan sebuah class response yang digunakan untuk mengumpulkan dan mengembalikan seluruh nilai response yang berasal dari Action Controller, class ini juga menampung variable informasi beserta nilai yang terkandung dalam variable tersebut.
Jadi alur kerja dari Zend_Controller relative mudah, sebuah request diterima oleh Zend_Controller_Front, setelah itu Zend_Controller_Reuter_Rewrite yang menentukan controller dan action dalam controler yang mana yang mengalami proses dispatch. Zend_Controller_Reuter_Rewrite juga meramu formula informasi dalam URI yang menentukan controller dan action yang terkandung dalam object request. Kemudian masuk ke dalam perulangan Zend_Controller_Front, proses berlanjut dengan Zend_Controller_Dispatcher_Standard, diteruskan dengan memberikan object request kepada dispatcher kepada controller dan action yang sudah ditentukan sebelumnya. Setelah proses controller selesai, maka control akan kembali ke Zend_Controller_Front. Jika controller menemukan tanda bahwa controller lain harus dispatch dengan mengatur ulang status dalam object request, maka perulangan berlanjut untuk melakukan dispatch lain atau perulangan berhenti.
Sekian sekilas pembahasan mengenai workflow Zend_Controller, jika ada tanggapan atau perbaikan sangat kami harapkan.
(Dialih bahasakan dari “Developer’s Reference Guide Zend Framework Chapter 7 Zend_Controller”)

