Welcome to Abdul Malik Ikhsan's Blog

Symfony2 and Zend Framework Integration

Posted in Tutorial PHP, Zend Framework by samsonasik on July 17, 2011

Symfony2 adalah Full stack PHP Development Framework dengan menggunakan fitur-fitur PHP 5.3, sedang Zend Framework adalah komponen library yang super banyak dan mempunyai layer MVC. Bila 2 Framework ini digabungkan, kebayang kan betapa dahsyatnya ? Hm…, tentu saja prinsip Use at will ( Use What you Need, Forget Everything Else) harus tetap dipakai. Kebutuhan komponen yang very komplit di Zend Framework bisa digunakan di Symfony dengan me-register-kan komponen Zend Framework pada autoloader Symfony Framewok.
Baca Selengkapnya

Dependency Injection -:: The Introduction ::- something must be known before attempting to use zend framework 2.0

Posted in Teknologi, Tutorial PHP, Zend Framework by samsonasik on June 18, 2011

Dependency Injection terjadi ketika komponen software ( dalam hal ini, kelas ) dependensinya diberikan melalui konstruktor mereka, method, atau langsung ke fields. Secara sederhana, Dependency Injection adalah passing atau setting dependency ke dalam komponen software ( Dependency Injection Container ). Dengan kata lain, jika sebuah kelas tidak dapat melakukan pekerjaannya tanpa dependency, maka terjadilah dependency injection. Kelas yang diinject, tidak hanya dapat membangun object, tapi juga perilakunya.

Baca Selengkapnya

Zend Framework : Zend_Acl ( Access Control Lists) Basic – Simple Authorization

Posted in Teknologi, Tutorial PHP, Zend Framework by samsonasik on May 29, 2011

Otorisasi adalah tindakan menentukan apakah seseorang memiliki izin untuk melakukan tindakan atas resource yang ada. Zend Framework mempunyai komponen Zend_Acl untuk mengatur hal tersebut. Zend_Acl dibagi menjadi 3 area, yaitu Resources, Roles, dan Rights. Resources adalah apa yang diakses, Roles adalah “yang mengakses” satu atau beberapa resource, dan Rights adalah hak akses Role terhadap Resource yang diakses. Secara default, Zend_Acl memberikan akses deny untuk semua resource, kita diharuskan memberikan whitelist terhadap akses roles terhadap resources yang kita inginkan.

Baca Selengkapnya

Zend Framework : Zend_Filter vs Zend_Validate – Filtering vs Validation

Posted in Tutorial PHP, Zend Framework by samsonasik on May 17, 2011

Definisi dasar dari filter dapat diartikan menghapus porsi yang tidak diinginkan dari sebuah input, dan membiarkan porsi yang diinginkan lewat dan tampil dalam output. Filtering sangat berguna pada aplikasi web untuk menghapus ilegal input, trimming white space yang tidak perlu, dan lain sebagainya.
Definisi dasar dari filter dapat diperluas untuk mencakup transformasi atas input yang dimasukkan. Transformasi yang banyak digunakan adalah escape HTMLEntities untuk meminimalisir lubang keamanan ( contoh : dari javascript ).

Lain halnya dengan validator, validator memeriksa input sehubungan dengan beberapa persyaratan yang memberikan nilai balik boolean true/false – apakah input berhasil divalidasi berdasar persyaratan yang diberikan.Sebagai contoh, sebuah aplikasi web memberi persyaratan bahwa username  harus lebih dari atau sama dengan 7 karakter dan kurang dari atau sama dengan 15 karakter.

Baca Selengkapnya

Zend Framework : CSRF ( Cross Site Request Forgery ) Protection

Posted in Javascript, Teknologi, Tutorial PHP, Zend Framework by samsonasik on May 6, 2011

XHR (  XMLHttpRequest ) adalah backbone dari aplikasi web 2.0. Adalah fungsi javascript yang powerfull yang menciptakan HttpRequest. Namun, dari kemudahan yang didapat, ternyata XHR menghadirkan konsekuensi tersendiri, yaitu security hole. XHR, seperti yang telah diatur oleh W3C (  World Wide Web Consortium ), hanya digunakan ketika request itu berasal dari website di mana javascript di muat ( same origin ) untuk menghindari penyalahgunaan dari pihak yang tidak bertanggungjawab.
‘Tekanan’ untuk membolehkan adanya akses cross domain mengingkat dengan adanya konsep mash-ups (sebuah konsep di mana membolehkan data dari beberapa site untuk bisa digabungkan dalam satu single view). Requirement ini bertentangan dengan “same origin policy” ( kebijakan penggunaan request dalam site yang sama)  yang diformulasikan untuk XHR. Sebagai response dari kebutuhan ini, maka kebijakan tersebut  diextends ke “level 2” standard, yang membolehkan akses cross domain jika persyaratan lain terpenuhi, untuk melindungi pengguna (W3C Web Applications Working Group, 2008).
Baca Selengkapnya

Zend Framework : Output Escaping – preventing XSS

Posted in Javascript, Teknologi, Tutorial PHP, Zend Framework by samsonasik on April 19, 2011

Cross-site scripting (XSS) merupakan salah satu jenis serangan injeksi kode yang secara umum ditemukan di aplikasi berbasis web melalui client-side script.  Salah satu cara menanganinya adalah dengan cara meng-escape output yang tampil pada halaman web. Pada Symfony Framework, output escaping otomatis dilakukan oleh framework itu sendiri, untuk Zend Framework , preventing XSS adalah tugas programmer :). XSS terjadi di bagian View, maka dari itu, Zend Framework menyediakan component Zend_View ( “view” portion of the ZF model-view-controller pattern) yang bisa digunakan untuk meng-escape output dari misalnya :

<script type="text/javascript">alert('hello');</script>

menjadi :

&lt;script type="text/javascript"&gt;alert('hello');&lt;/script&gt;

Sehingga kode javascript tidak tereksekusi. Nah, ada 2 cara penggunaan metode ini :
1. Encoding before echoing
Di layer View, tinggal kita panggil :

<?php echo $this->escape("<script type=\"text/javascript\">alert('hello');</script>"); ?>

2. Encoding when assigning template variables
Cara yang kedua ini, kita escape dulu di controller, contoh sebagai berikut :

$this->view->title = $this->view->escape("<script type=\"text/javascript\">alert('hello');</script>");

Baru di layer view :

 echo $this->title; 

Referensi :
http://www.scribd.com/doc/18171526/Secure-Programming-with-the-Zend-Framework
http://www.minte9.com/kb/zend-view-helper-programming-zend-framework-i329
http://devzone.zend.com/article/3412
http://en.wikipedia.org/wiki/Client-side_script
http://en.wikipedia.org/wiki/Cross-site_scripting
http://id.wikipedia.org/wiki/XSS
http://stackoverflow.com/questions/507593/what-is-the-best-way-to-escape-user-output-with-the-zend-framework

Zend Framework : Zend_Log – Working with Logs

Posted in Tutorial PHP, Zend Framework by samsonasik on April 17, 2011

Sebegitu pentingnya sebuah sejarah, sampai-sampai beberapa framework menambahkan fitur log, termasuk Zend Framework. Dengan adanya application log, kita bisa mengetahui apa saja yang telah terjadi yang bersinggungan dengan aplikasi kita. Log yang ada, salah satunya, bisa kita simpan di dalam file.
Kali ini, saya akan mencoba memaparkan penggunaan Zend_Log dengan media penyimpanan file dengan teknik Stream.
Pertama, yang kita butuhkan adalah file yang kita tunjuk sebagai media penyimpanan log, anggaplah kita simpan dalam PROJECTKITA\log\application.log, seperti berikut :


Kalau sudah, kita atur deh ErrorController kita sebagai berikut :

<?php
class ErrorController extends Zend_Controller_Action
{
public function errorAction()
{
$errors = $this->_getParam('error_handler');
switch ($errors->type) {
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
// 404 error -- controller or action not found
$this->getResponse()->setHttpResponseCode(404);
$this->view->message = 'Page not found';
break;
default:
// application error
$this->getResponse()->setHttpResponseCode(500);
$this->view->message = 'Application error';
break;
}

// Log exception, if logger available
if ($log = $this->getLog()) {
$log->crit($this->view->message . " : ". $errors->exception);
}

// conditionally display exceptions
if ($this->getInvokeArg('displayExceptions') == true) {
$this->view->exception = $errors->exception;
}

$this->view->request   = $errors->request;
}

public function getLog()
{
$bootstrap = $this->getInvokeArg('bootstrap');
if (!$bootstrap->hasPluginResource('Log')) {
return false;
}
$log = $bootstrap->getResource('Log');
return $log;
}

}

Selanjutnya, kita setting di application.ini kita, tambahkan kode berikut :

;call Zend_Log_Writer_Stream
resources.log.stream.writerName = "Stream"
resources.log.stream.writerParams.stream = APPLICATION_PATH "/../log/application.log"

Dari kode yang telah kita buat di atas, semua critical error akan dicatat dalam file application.log seperti berikut :

2011-04-16T20:54:33+07:00 CRIT (2): Page not found : exception 'Zend_Controller_Action_Exception' with message 'Action "aa" does not exist and was not trapped in __call()' in D:\Zend\Apache2\htdocs\zftutwordpress\library\Zend\Controller\Action.php:485
Stack trace:
#0 D:\Zend\Apache2\htdocs\zftutwordpress\library\Zend\Controller\Action.php(515): Zend_Controller_Action->__call('aaAction', Array)
#1 D:\Zend\Apache2\htdocs\zftutwordpress\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('aaAction')
#2 D:\Zend\Apache2\htdocs\zftutwordpress\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#3 D:\Zend\Apache2\htdocs\zftutwordpress\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#4 D:\Zend\Apache2\htdocs\zftutwordpress\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#5 D:\Zend\Apache2\htdocs\zftutwordpress\public\index.php(27): Zend_Application->run()
#6 {main}

Nah, bagaimana ketika kita mempunyai hal aktivitas lain yang ingin kita simpan juga dalam history ? Yang kita perlukan adalah meng-inisialisasi resource dalam file Bootstrap.php kita dengan menambahkan function _init* sebagai berikut :

protected function _initLog()
{
if ($this->hasPluginResource('log')){
$r = $this->getPluginResource('log');
$log = $r->getLog();
Zend_Registry::set('log', $log);
}
}


Kalau sudah, kita coba test dengan memanggil di sembarang action ( misal di TestlogController dengan action indexAction ) sebagai berikut  :

Zend_Registry::get('log')->info('something happened');

maka, di file log akan tampil semacam berikut :

2011-04-17T00:03:15+07:00 INFO (6): something happened

Hm…, asyik kan ? semoga bermanfaat 😀

Referensi :
http://www.zendcasts.com/transparent-logging-with-zend_log/2010/06/
http://framework.zend.com/manual/en/zend.log.writers.html
http://id.php.net/stream
http://en.wikipedia.org/wiki/Server_log
http://framework.zend.com/manual/en/learning.quickstart.create-model.html
http://en.wikipedia.org/wiki/Stream_%28computing%29

Zend Framework : View Partials – Dealing with Complex Templates

Posted in Tutorial PHP, Zend Framework by samsonasik on April 6, 2011

Bagi kamu-kamu yang ber-background Ruby on Rails, tentu sudah tidak asing lagi donkz dengan View Partials. Perbedaan rendering secara partial dengan normal view adalah bahwa partial mempunyai ruang lingkup variable sendiri, ia hanya akan melihat variable yang dilewatkan secara langsung. Sebagai contoh seperti berikut :

<?php echo $this->partial('foo.phtml', array('foo' => 'bar'));  ?> 

Dari contoh di atas, variable yang bisa dipakai di foo.phtml hanyalah single variable ‘foo’ dengan value ‘bar’. View Partials biasanya digunakan untuk menangani complex templates dengan mempunyai banyak view logic ( dalam konsep MVC, dibolehkan terdapat logic di view, asalkan logic tersebut digunakan untuk mengolah view , bukan mengolah data ). Misal kita ingin menampilkan data sehingga tampil seperti berikut :

Ok, kita bisa membuat Controller seperti di bawah :

<?php
//Controller
class TestpartialController extends Zend_Controller_Action
{
 public function init()
 {
 $this->getHelper('layout')->disableLayout();
 }

 //simple func to create fake data
 private function setItem($id,$name)
 {
 $item = new stdClass();
 $item->id = $id;
 $item->name = $name;

 return $item;
 }

 //index action -> render to index.phtml
 public function indexAction()
 {
 $items = array();
 $items[] = $this->setItem(1,'abdul');
 $items[] = $this->setItem(2,'malik');
 $items[] = $this->setItem(3,'ikhsan');
 $items[] = $this->setItem(4,'emang');
 $items[] = $this->setItem(5,'ganteng');
 $items[] = $this->setItem(6,'banget');
 $items[] = $this->setItem(7,'gitu lhoh');

 $this->view->items = $items;
 }
}

Nah, di sisi view, kita ingin menampilkan data dengan record bergantian warna-warni ( dibutuhkan logic untuk mengolah view ), maka kita bisa bagi menjadi 2, satu untuk “heading” ( index.phtml ) dan satu untuk dilooping dengan logic yg lebih kompleks ( rows.phtml ) .

<table width="70%">
 <tr>
 <th>ID</th>
 <th>NAME</th>
 </tr>
 <?php
 $alt = false;
 foreach($this->items as $item){
 $alt = !$alt;
 // 'render' another view
 echo $this->partial('testpartial/rows.phtml', array('alt'=>$alt, 'item'=>$item) );
 } ?>
</table>

Sekarang, kita buat file view lain yang akan dirender dengan variable yang dilewatkan

array('alt'=>$alt, 'item'=>$item)

Berikut contoh view logic ( rows.phtml ) :

<?php
 $style = "background-color:yellow;";  //view logic to manage view
 if ($this->alt) $style="";
?>
<tr style="<?php echo $style; ?>">
 <td><?php echo $this->item->id; ?></td>
 <td><?php echo $this->item->name; ?></td>
</tr>

Semoga bermanfaat 😀
Referensi :
http://www.zendcasts.com/zend-view-partials/2009/03/
http://devzone.zend.com/article/3412
http://framework.zend.com/manual/en/zend.view.helpers.html
http://stackoverflow.com/questions/746260/where-do-i-save-partial-views-in-zend-framework-to-be-accessible-for-all-views
http://stackoverflow.com/questions/931407/what-is-stdclass-in-php
http://www.webmaster-source.com/2009/08/20/php-stdclass-storing-data-object-instead-array/
http://us2.php.net/variables.scope

Zend Framework : Zend_Feed_Writer – Generating Feeds

Posted in Tutorial PHP, Zend Framework by samsonasik on March 27, 2011

Zend_Feed_Writer adalah salah satu dari komponen Zend Framework yang bisa mengenerate RSS Feeds tanpa harus berpusing ria dengan XML. Arsitektur dari Zend_Feed_Writer sangatlah simple, ia terdiri dari 2 core class yaitu data container, dan renderer. Dalam container terdapat class Zend_Feed_Writer_Feed dan Zend_Feed_Writer_Entry. Kelas Entry dapat dilampirkan pada setiap kelas Feed. Tujuan utama container ini adalah untuk mengumpulkan data tentang feed untuk menghasilkan antarmuka yang sederhana menggunakan metode setter.
Ok, Anggaplah kita mempunyai data artikel di web kita yang akan kita tampilkan dalam RSS Feeds. Sebagai contoh seperti berikut :

$feed = new Zend_Feed_Writer_Feed;
$feed->setTitle('Testing Channel RSS');
$feed->setLink('http://www.urldomainkita.com');
$feed->setFeedLink('http://www.urldomainkita.com/rss', 'atom'); //url tempat kita buat rss ini ...
$feed->addAuthor(array(
'name'  => 'domainkita',
'email' => 'contact@domainkita.com',
'uri'   => 'http://www.domainkita.com',
 ));
//waktu modify
$feed->setDateModified(time());

//get data article ...( anggaplah kita sudah mempunyai method
//getDataArticle untuk mengambil 30 artikel terakhir
$artikel = new App_Model_Article();
$articledata = $artikel->getDataArticle(30);

//looping data artikel...
foreach($articledata as $key=>$row)
{
$entry = $feed->createEntry();
$entry->setTitle($row['title']);
$entry->setLink($row['link']);
$entry->addAuthor(array(
'name'  =>$row['author'],
'email' => $row['email'],
'uri'   =>  $row['authorsite'],
));

$datemodified = new Zend_Date($row['updated_at']);
$datecreated  = new Zend_Date($row['article_date']);

$entry->setDateModified( $datemodified->getTimestamp() );
$entry->setDateCreated( $datecreated->getTimestamp() );

$entry->setDescription("<img src=\"".$row['image']."\" align=left hspace=7 />".$row['content']);
$entry->setEnclosure(array('type'=>'image/jpg','length'=>$row['imagesize'],
'uri'=>$row['image']));
$entry->getEnclosure();

//menambahkan entry ke feed...
$feed->addEntry($entry);
}

$out = $feed->export('atom');

//showing...
echo $out;

Semoga bermanfaat.

Image :
http://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Feed-icon.svg/128px-Feed-icon.svg.png

Referensi :
http://framework.zend.com/manual/en/zend.feed.writer.html

Zend Framework : Zend_Feed_Rss – Consuming an RSS Feed

Posted in Teknologi, Tutorial PHP, Zend Framework by samsonasik on March 27, 2011

RSS (Really Simple Syndication) adalah sebuah file berformat XML untuk sindikasi yang telah digunakan ( diantaranya dan kebanyakan ) situs web berita dan weblog. Teknologi yang dibangun dengan RSS mengijinkan kita untuk berlangganan kepada situs web yang menyediakan umpan web (feed) RSS, biasanya situs web yang isinya selalu diganti secara reguler.

Zend Framework mempunyai komponen yang memungkinkan kita untuk mengconsume RSS Feed dari sebuah website. Caranya, dengan menginstansiasi Zend_Feed_Rss Object seperti berikut :

$channel = new Zend_Feed_Rss('http://rss.example.com/channelName');

Contoh lengkap sebagai berikut :

<?php
include "Zend/Feed/Rss.php";
 $channel = new Zend_Feed_Rss('http://rss.example.com/channelName');
 ?>
<div>
 <p>
 <label> <?php /*nama channel */ echo $channel->title(); ?> </label>
 </p>

 <?php foreach ($channel as $key=>$item) {  ?>
 <label>
<a href="<?php  /*menampilkan link feed item */ echo $item->link(); ?>">
<?php  //menampilkan title
echo $item->title();
?>
</a>
</label>
 <br />
 <label>
 <?php
//menampilkan publish date
echo $item->pubDate(); ?>
 </label>
 <p>
 <?php
//menampilkan description
echo $item->description(); ?>
 </p>
 <?php } ?>
</div>

Image :
http://upload.wikimedia.org/wikipedia/commons/thumb/4/43/Feed-icon.svg/128px-Feed-icon.svg.png

Referensi :
http://framework.zend.com/manual/en/zend.feed.consuming-rss.html
http://id.wikipedia.org/wiki/RSS
http://id.wikipedia.org/wiki/XML
http://id.wikipedia.org/wiki/Weblog
http://en.wikipedia.org/wiki/Web_feed

Zend Framework – Custom View Rendering

Posted in Teknologi, Zend Framework by samsonasik on February 26, 2011

Adalah sebuah risiko, di mana bumi dipijak, di situlah langit dijunjung. Begitu pula ketika kita menggunakan Framework, maka aturan main harus kita ikuti. Hm.., tapi salah satu dari 7 Hukum alam semesta adalah Hukum Substitusi, di mana sesuatu bisa digantikan dengan hal lain selama tidak menghilangkan nilai-nilai luhur di dalamnya. Halah, saya bijak banget ya 😀
Zend Framework adalah framework yang sangat flexibel dalam penggunaanya, dalam aturan view rendering, ia mempunyai aturan default, tapi kita bisa mengubah jika kita mau, dengan meng-override aturan yang ada ( bukan mengubah core nya lho… ).
Sebagai contoh, kita ingin mengubah suffix extension di script view kita, dan juga mengubah file yang harusnya otomatis dirender, maka kita lakukan seperti berikut (di controller yang kita buat) :

<?php

class TestcustomviewController extends Zend_Controller_Action
{

 public function init()
 {
 /* Initialize action controller here */
 //set suffix for view extension
 $this->getHelper('viewRenderer')->setViewSuffix('php');
 }

 public function indexAction()
 {
 // action body
 //data will be catch in view ..
 $this->view->persons = array(
 array('id'=>0,'name'=>'abdul malik ikhsan'),
 array('id'=>1,'name'=>'adi sucipto'),
 );

 //render custom view file --> if default must be index.phtml
 $this->render('testcustomview-index');
 }

}

Ok, karena kita buat custom render filenya  testcustomview-index . maka di view nya harus seperti ini :

Referensi :
http://till.klampaeckel.de/blog/archives/92-Zend-Framework-Slow-automatic-view-rendering.html
http://framework.zend.com/manual/en/zend.controller.action.html
http://www.inspiratio.web.id/?p=328

Zend Framework : Zend_Soap and JSON – Handling Complex Data

Posted in Tutorial PHP, Zend Framework by samsonasik on February 19, 2011

(Sebelum membaca artikel ini, sebaiknya baca dulu artikel sebelumnya tentang web services – red). Point paling penting dari web services adalah INTEROPERABILITY aplikasi, di mana teknologi yang berbeda dapat saling dikaitkan tanpa terikat bahasa pemrograman. Lalu, data-data yang berhubungan bersifat MASHUP di mana tempat penyimpanan data bisa bersifat outsource. Nah, bagaimana cara mengambil data yang bersifat kompleks ? Seperti array atau object ? Kali ini kita akan membahas tentang pemanggilan kompleks data tersebut dengan Zend Framework (komponen Zend_Soap).

Anggap saja kita mempunyai sebuah kelas yang akan memanggil data kompleks :

class Person
{
   /** @var string[] */
   public $name;
   /** @var string[] */
   public $address;
}

class Model_Soaps
{
     /**
     * @param string
     * @return object|array
     */
     public function getData($caller="json")
     {

        $data = array(
		    array('name'=>'abdul malik ikhsan', 'address'=>'jalan sukabumi 15'),
		    array('name'=>'doni iskandar', 'address'=>'jalan petak umpet'),
		    array('name'=>'banu sucipto', 'address'=>'jalan riau 25')
                );
        if ($caller=="json")
	   return  json_encode($data);
        else
           return $data;

     }

    /**
      * @return Person
     */
     public function getComplex()
     {
        $person = new Person();
        $person->name[] = "abdul malik ikhsan";
        $person->address[] = "jalan sukabumi 15";

        $person->name[] = "doni iskandar";
        $person->address[] = "jalan petak umpet";

        $person->name[] = "banu sucipto";
        $person->address[] = "jalan riau 25";

        return $person;
     }
}

Function getData() mengembalikan nilai array atau object json, sedangkan getComplex() adalah fungsi yang mengembalikan instance dari class Person. Nah, yang kita butuhkan adalah Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence yang kita pakai sebagai strategi yang dilewatkan pada saat instansiasi kelas Zend_Soap_AutoDiscover seperti berikut :

....
  $autodiscover = new Zend_Soap_AutoDiscover('Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence');
....

Nah, anggaplah kita punya 2 function untuk memanggil return data tadi dan menghasilkan json encode.

....
    private $wsdlurl = 'http://service.com?wsdl';
    public function clientAction()
    {
        $client = new Zend_Soap_Client($this->wsdlurl);
        //isi variable...
        $strofclient =  $client->getData("json");
	print_r($strofclient);

	die;
    }

    public function client2Action()
    {
        $client = new Zend_Soap_Client($this->wsdlurl);
        //isi variable...
        $strofclient =  $client->getComplex();

	print_r( json_encode( $strofclient ));

	die;
    }
....

Dan kita akan coba tampilkan hasil responsenya di view :

<script type="text/javascript" src="<?php echo $this->baseUrl(); ?>/js/jquery-1.4.2.js"></script>
<script type="text/javascript">
  $(document).ready(function(){
      $("#testcall").click(function(){
           $.get('<?php echo $this->baseUrl('/index/client'); ?>?'+(new Date()).getTime(), function(data){
              for(var i=0;i<=2;i++){
                    $("#nameoutput_"+i).html( data[i].name );
                    $("#addressoutput_"+i).html( data[i].address );
               }
           },"json");
      });

      $("#testcallobject").click(function(){
           $.get('<?php echo $this->baseUrl('/index/client2'); ?>?'+(new Date()).getTime(), function(data){
              for(var i=0;i<=2;i++){
                    $("#nameoutputobj_"+i).html( data.name.item[i]);
                    $("#addressoutputobj_"+i).html( data.address.item[i]);
               }
           },"json");
      });
  });
</script>
<input type="button" value="testcall simple array" id="testcall" />

<br />
<?php for($i=0;$i<=2;$i++){ ?>
name    <?php echo $i; ?> : <label id="nameoutput_<?php echo $i; ?>"></label> <br />
address <?php echo $i; ?> : <label id="addressoutput_<?php echo $i; ?>"></label> <br />
<?php } ?>

<hr />
<input type="button" value="testcall array object" id="testcallobject" />
<br />

<?php for($i=0;$i<=2;$i++){ ?>
    name    <?php echo $i; ?> : <label id="nameoutputobj_<?php echo $i; ?>"></label> <br />
    address <?php echo $i; ?> : <label id="addressoutputobj_<?php echo $i; ?>"></label> <br />
<?php } ?>

Jika berhasil, maka akan tampil seperti berikut :

Baca juga :
https://samsonasik.wordpress.com/2010/06/16/zend-framework-create-web-services-using-zend-soap/

Referensi :
http://framework.zend.com/manual/en/zend.soap.wsdl.html#zend.soap.wsdl.types.add_complex
http://publib.boulder.ibm.com/infocenter/wsdatap/v3r8m1/index.jsp?topic=/xi50/xmlfirewalldevelopersguide10.htm
http://en.wikipedia.org/wiki/Mashup_(web_application_hybrid)
http://yetanotherprogrammingblog.com/node/12
http://stackoverflow.com/questions/2287282/using-of-zend-soap-wsdl-strategy-arrayoftypecomplex-with-string

Codeigniter 2.0 and Zend Framework Integration

Posted in Tutorial PHP, Zend Framework by samsonasik on February 3, 2011

Codeigniter adalah Framework PHP yang mempunyai performance paling cepat dibandingkan Framework-framework yang lain, sedangkan Zend Framework adalah Framework PHP yang mempunyai jumlah komponen yang luar biasa banyak ( paling banyak ) dibanding Framework yang lain, dengan pendekatan Use at will ( Use What you Need, Forget Everything Else). Bagaimana kalau keduanya itu kita gabungkan, hasilnya, so so so powerfull.

Yang kita butuhkan adalah mengkopi komponen Zend Framework kita ke folder third party Codeigniter 2.0 seperti berikut :

Kita butuh zf.php di folder zf\libraries untuk loader Zend Component.

<?php
class Zf {
 public function __construct()
 {
   set_include_path(implode
   (
       PATH_SEPARATOR,
       array(realpath( APPPATH.'third_party/zf' ),
       get_include_path()))
    );

    require_once 'Zend/Loader/Autoloader.php';
    require_once APPPATH.'third_party/zf/Zend/Loader/Autoloader.php';
    $autoloader = Zend_Loader_Autoloader::getInstance();
 }
}

Nah, kalau sudah, kita bisa panggil di semua tempat di aplikasi CodeIgniter 2.0 kita, sebagai contoh saya panggil di Controller :

$this->load->add_package_path(APPPATH.'third_party/zf');
$this->load->library('zf');
$arraydebug = array('nama' =>'samsonasik' ,
                    'ciriciri' => 'ganteng'
                    );

//use the zf library 😉
Zend_Debug::Dump($arraydebug);

Baca Juga :
https://samsonasik.wordpress.com/2010/03/05/codeigniter-modular-with-separating-your-own-module-and-core-codeigniter-application-framework/

https://samsonasik.wordpress.com/2009/12/19/zend-framework-modular-application-for-efficient-development-process/

Bahan Referensi :
http://codeigniter.com
http://www.slideshare.net/ccornutt/no-really-its-all-about-you
http://devzone.zend.com/article/1768
http://www.4webby.com/freakauth/tutorials/using-zend-framework-components-in-code-igniter
http://en.wikipedia.org/wiki/Presentation-abstraction-control
Gambar :
http://thegeektips.com/tips-tricks/codeigniter-2-0-is-ready/

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

Zend Framework – Working with Custom Routes

Posted in Tutorial PHP, Zend Framework by samsonasik on December 21, 2010

Routes adalah penghubung antara request  dan action.  Ketika user me-request halaman aplikasi melalui URL, maka FrontController menampung request, dan memutuskan Controller dan action mana yang akan dipanggil berdasarkan URLpattern. Proses request routing adalah kunci dari eksekusi flow aplikasi.

Proses routing rinciannya sebagai berikut :
1. Ketika request datang, maka .htaccess akan me-rewrite ke standard format dan melewatkan ke index.php
2. FrontController memeriksa request berdasarkan URL, dan mencocokkan dengan default maupun custom routes.
3. Jika cocok, maka FrontController mentransfer ke controller dan action yang sesuai. Jika benar, maka view dan layout akan dirender ke user jika diperlukan.
4. Jika tidak cocok, maka exception dan ErrorController akan dipanggil dan errorAction akan merender error message ke user.

Secara default, Zend Framework mempunyai routing standard, yaitu  :module/:controller/:action/* ( params /paramsvalue) . Nah, bagaimana ketika kita membutuhkan routing yang berbeda ? Yang kita perlukan adalah FrontController untuk mengatur routing tersebut, dan kita bisa tambahkan itu di default Bootstrap aplikasi Zend Framework kita, seperti berikut :

class Default_Bootstrap extends Zend_Application_Module_Bootstrap
{
protected function _initModule()
{
//instance before route from controllerfront
$this->frontController = Zend_Controller_Front::getInstance();
$this->router = $this->frontController->getRouter();
}

protected function _initRoutes()
{
//routingnya menjadi lang/module/controller/action
$this->router->addRoute('langaddmodaction',
new Zend_Controller_Router_Route('/:lang/:module/:controller/:action/*',
array('lang'=>'id',
'module'=>'default',
'controller'=>'index',
'action'=>'index')
));
}

protected function _initApp()
{
$request =  new Zend_Controller_Request_Http();
$this->router->route($request);
}
}

Referensi :
Zend Frawework, A Beginner’s Guide, Vikram Viswani
http://framework.zend.com/manual/en/zend.controller.router.html