|
|
이전 글 CodeIgniter 라이브러리에 ZendAMF 추가하기를 마치셨다면 이번에는 Flex와 연동하는 것을 시작하겠습니다.
대부분은 글은 머드초보님의 글을 바탕으로 진행할 예정입니다.(출처: [Flex/PHP] Zend AMF를 이용한 PHP와 FLEX의 연동삽질후기)
①. 먼저 DB를 생성하고 데이터입력입니다
DROP TABLE IF EXISTS `sosi`.`sosi`; CREATE TABLE `sosi`.`sosi` ( `idx` int(10) unsigned NOT NULL AUTO_INCREMENT, `sosiname` varchar(45) NOT NULL, `height` int(10) unsigned NOT NULL, `blood` varchar(45) NOT NULL, PRIMARY KEY (`idx`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; INSERT INTO `sosi` (`idx`,`sosiname`,`height`,`blood`) VALUES (1,'윤아',166,'B'), (2,'수영',170,'O'), (3,'효연',160,'AB'), (4,'유리',167,'AB'), (5,'태연',162,'O'), (6,'제시카',163,'B'), (7,'티파니',162,'O'), (8,'써니',158,'B'), (9,'서현',168,'A');
②. Flex Project 'ZendAmfTest'를 만듭니다. 머드초보님은 Application server type을 php으로 하셨는데 저는 서버가 외부에 있어서 None/Other로 하였습니다. 로컬이라면 php를 선택하신 다음에 아파치나 iis가 돌아가는 폴더를 지정하면 됩니다. 지정하게 되면 SWF가 서버로 바로 위치하게 되므로 테스트하기 편합니다.
③. 그런 다음 system>application>libraries에 sosimember.php라는 파일을 만듭니다. CI특성상 파일명은 소문자로 만드셔야합니다.
④. 다음은 DB에서 데이터를 가져오고 반환하는 모델을 만듭니다. system>application>models에 sosimodel.php를 생성하시고 아래 코드입력합니다.
load->library("SosiMember"); $query = $this->db->query('SELECT idx, sosiname, height, blood FROM sosi;'); $ret = array(); foreach ($query->result() as $row){ $tmp = new SosiMember(); $tmp->idx = $row->idx; $tmp->sosiname = $row->sosiname; $tmp->height = $row->height; $tmp->blood = $row->blood; $ret[] = $tmp; } return $ret; } } ?>
⑤. 다음은 controllers를 만듭니다. 여기에 ZendPHP가 들어갑니다. system>application>controllers에 remote.php를 생성하시고 아래 코드입력합니다.
load->model('SosiModel'); } public function index() { $this->load->library("Apps"); $this->apps->load("Zend/Amf/Server"); $server = new Zend_Amf_Server(); $server->setClass("SosiModel"); $server->setClassMap("SosiMember", "SosiMember"); echo($server -> handle()); } } ?>
⑥. 이제 Flex에게 PHP를 연결할 설정을 역할을 하는 service-config.xml을 만듭니다.
⑦. Flex파일 ZendAmfTest.mxmlf에 아래 코드를 입력합니다.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
creationComplete="creationCompleteHandler()">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
private function creationCompleteHandler():void
{
roSosi.getData();
}
private function faultHandler(event:FaultEvent):void
{
Alert.show(event.message.toString());
}
private function resultGetDataHandler(event:ResultEvent):void
{
dgSosi.dataProvider = event.result as Array;
}
]]>
</mx:Script>
<mx:RemoteObject id="roSosi" fault="faultHandler(event)" destination="zend" source="SosiModel">
<mx:method name="getData" result="resultGetDataHandler(event)" />
</mx:RemoteObject>
<mx:DataGrid id="dgSosi" width="100%" height="100%">
<mx:columns>
<mx:DataGridColumn headerText="아이디" dataField="idx"/>
<mx:DataGridColumn headerText="소녀시대이름" dataField="sosiname"/>
<mx:DataGridColumn headerText="신장" dataField="height" />
<mx:DataGridColumn headerText="혈액형" dataField="blood" />
</mx:columns>
</mx:DataGrid>
</mx:Application>
SyntaxHighlighter가 Flex를 지원하지 않네요ㅠ
만약 다른 서비스를 추가하게 된다면, <mx:RemoteObject>에서 endpoint를 다른 url로 잡아주면 됩니다.
<mx:RemoteObject id="roAnother" fault="faultHandler(event)"
destination="zend" source="AnothorService"
endpoint="http://localhost/ZendAmfTest-debug/another_amf.php">
destination="zend" source="AnothorService"
endpoint="http://localhost/ZendAmfTest-debug/another_amf.php">
그렇게 Flex를 컴파일 하게 되면 아래와 같이 출력됩니다.
이상입니다. 혹시 에러나 잘못된 점은 지적해주시기 바랍니다.
참고사이트:
http://corlan.org/2008/11/13/flex-and-php-remoting-with-zend-amf/
http://mudchobo.tomeii.com/tt/398
'Web Programming > PHP' 카테고리의 다른 글
CodeIgniter 라이브러리에 ZendAMF 추가하기 (0) | 2010.09.29 |
---|---|
[CodeIgniter] Multiple Image Upload (1) | 2009.11.26 |
CentOS 5.2 APM 구축 매뉴얼 (2) | 2009.11.03 |
파라미터가 UTF-8 인지 검사 (0) | 2009.04.24 |
PHP 사용자를 위한 EditPlus 설정 (3) | 2009.02.27 |