PHP variable value when send by HTTPService or RemoteObject
2010/07/15 Leave a Comment
มาดูกันว่าเกิดอะไรขึ้นถ้าเราส่ง object ที่ซับซ้อนจาก Flex app. ไปยัง PHP หรือ AMFPHP
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<!-- AS2PHP.mxml -->
<mx:Script>
<![CDATA[
import mx.controls.TextInput;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
private var ar:Array = new Array(
new Array("one", "two", "three"),
new Array(
new Array("s1", "s2"),
new Array("t1", "t2"),
{obj1:"obj1_val", obj2:"obj2_val"},
{obj1:"obj1_val", obj2:new Array("in_obj2_no1", "in_obj2_no2")}
),
new Date(),
new TextInput()
);
private function btClickHs():void{
hs.send(ar);
}
private function btClickHsAdvance():void{
hsAdvance.send(ar);
}
private function faultHandler( event:FaultEvent ):void{
Alert.show("Fail");
}
private function hsResultHandler( event:ResultEvent ):void{
}
private function hsAdvanceResultHandler( event:ResultEvent ):void{
}
private function btClickRm():void{
rm.getOperation("as2amfphp").send(ar);
}
private function rmResultHandler( event:ResultEvent ):void{
}
]]>
</mx:Script>
<mx:HTTPService id="hs" url="httpservice/actionscript2php.php"
fault="faultHandler(event)"
result="hsResultHandler(event)"/>
<mx:HTTPService id="hsAdvance" url="httpservice/actionscript2php_advance.php"
fault="faultHandler(event)"
result="hsAdvanceResultHandler(event)"/>
<mx:RemoteObject id="rm"
endpoint="amfphp/gateway.php"
source="actionscript2amfphp.ActionScript2AMFPHPDao"
destination="none"
fault="faultHandler(event)"
result="rmResultHandler(event)"/>
<!-- Use RemoteObject with out services-config.xml file -->
<mx:Button click="btClickHs()" label="Send by HTTPService"/>
<mx:Button click="btClickHsAdvance()" label="Send by HTTPService advance"/>
<mx:Button click="btClickRm()" label="Send by RemoteObject"/>
</mx:Application>
ลองดูผลลัพธ์อย่างง่าย
<?php
//httpservice/actionscript2php.php
//ini_set('default_charset', 'UTF-8');
header('Content-Type:text/html; charset=UTF-8');
$as2PHPTrace = new ActionScript2PHPTrace();
echo print_r($_GET);
ผลลัพธ์เห็นโครงสร้างคร่าวๆ กับค่าต่างๆ
<?php
// httpservice/actionscript2php_advance.php
// Ref : http://php.net/manual/en/function.gettype.php
class ActionScript2PHPTrace {
function _tabbing($i_tab) {
$str = "";
for($i = 0; $i < $i_tab; $i++) {
$str .= "\t";
}
return $str;
}
function getTrace($var, $i_tab = 0) {
$str = "";
if( is_array($var) ) {
$str .= "Array[\n";
foreach ($var as $key_ar => $value_ar) {
$str .= $this->_tabbing($i_tab + 1).$key_ar.":".gettype($value_ar)."=>".$this->getTrace($value_ar, $i_tab + 1)."\n";
}
$str .= $this->_tabbing($i_tab)."]\n";
return $str;
}
if( is_object($var) ) {
$str .= "{\n";
foreach ($var as $key_obj => $value_obj) {
$str .= $this->_tabbing($i_tab + 1).$key_obj.":".gettype($value_obj)."=>".$this->getTrace($value_obj, $i_tab + 1)."\n";
}
$str .= $this->_tabbing($i_tab)."}";
return $str;
}
return $var;
}
}
//ini_set('default_charset', 'UTF-8');
header('Content-Type:text/html; charset=UTF-8');
$as2PHPTrace = new ActionScript2PHPTrace();
echo $as2PHPTrace->getTrace($_GET);
ผลลัพธ์ก็ยังเป็นประเภท string
<?php
//amfphp/service/actionscript2amfphp/ActionScript2AMFPHPDao.php
class ActionScript2AMFPHPDao {
function as2amfphp($obj){
return $obj;
}
}
ผลลัพธ์คือสามารถมองเห็นความซับซ้อนของ object ที่ส่งไปได้


