Php/zend framework/zend amf
提供: 初心者エンジニアの簡易メモ
バイナリで高速にflashとphpでやりとりを行えるライブラリです。
zendサンプル
controllerを作成
require_once APPLICATION_PATH . '/models/amf/HelloWorldAmf.php';
class AmfController extends Zend_Controller_Action
{
private $_server;
public function init()
{
// ビュー無効化
$this->_helper->viewRenderer->setNoRender(true);
// サーバー初期化
$this->_server = new Zend_Amf_Server();
}
public function helloAction()
{
$this->_server->setClass('HelloWorldAmf');
}
public function postDispatch()
{
// リクエスト処理
$response = $this->_server->handle();
// レスポンス返却
echo $response;
}
}
モデルを作成
class HelloWorldAmf
{
public function hello($value)
{
return $value . "World!";
}
}
as2サンプル
import mx.remoting.*; import mx.rpc.*; import mx.remoting.debug.NetDebug; //URL var gatewayUrl:String = "http://localhost/amf/hello"; //デバッグの初期化 NetDebug.initialize(); //PHPのHelloWorldクラスを呼ぶ var _service:Service = new Service(gatewayUrl, null, 'HelloWorldAmf', null , null); var pc:PendingCall = _service.hello("Hello!"); pc.responder = new RelayResponder(this, "handleResult", "handleError"); function handleResult(event:ResultEvent) { trace(event.result); } function handleError(event:FaultEvent) { trace("エラー"); }
as3サンプル
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import flash.net.Responder;
import flash.events.NetStatusEvent;
// AMF3形式でデータを送る
private function send():void {
//(1-1)結果に応じたコールバック関数を登録したオブジェクト
var responder:Responder = new Responder(_onSuccess, _onFailure);
//(1-2)Zend_Amfとの接続のためのオプジェクト
var nc:NetConnection = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, _onNetStatus);
//(1-3)Zend_AmfのURLを指定
nc.connect('http://localhost/amf/hello');
//(1-4)AMF3 でエンコードするように指定
nc.objectEncoding = ObjectEncoding.AMF3;
//(1-5)渡すデータを作成
var params:DataAS = new DataAS;
params = "Hello!";
//(1-6)Zend_AmfにgetHelloStringをリクエスト
nc.call('HelloWorldAmf.hello', responder, params);
}
private function _onNetStatus(e:NetStatusEvent):void
{
trace("サーバコネクションに失敗。(" + e.info.code + ")");
}
// 成功時の処理
private function _onSuccess(ret:*):void {
if (typeof ret == 'string') {
//テキストエリアに帰って来た文字列を追加
trace(ret);
}
}
// サーバ処理時に失敗した時の処理
private function _onFailure(ret:*):void {
trace('サーバ処理時に失敗');
}
