2011-10-28 7 views
1

AMFエンドポイントとしてFlex 4.5とZend_AMFを使用してアプリケーションを構築しています。AMFクラスマッピングが機能しない

PHPのCRequestというクラスをFlexのRequestというクラスにマップしたいと思います。

これは私のPHPのクラスです:

<?php 
namespace app\web; 

class CRequest{ 
    public $_explicitType = 'com.site.remote.Request'; 

    public $stuff1; 

    public $stuff2; 

} 

これは、ActionScriptクラスである:試験としてcom.site.remote.Request

package com.dreamatique.remoting 
{ 
    [Bindable] 
    [RemoteClass(alias="com.site.remote.Request")] 
    public class Request 
    { 

     public var stuff1:String; 

     public var stuff2:String; 

     public function Request() 
     { 
     } 
    } 
} 

、私はエンドポイントがのインスタンスを返してきましたPHP側からのCRequest、要求に関係なく。

は、私は、このようにリモートオブジェクトの呼び出しを作っています:

var remoteObject:RemoteObject = new RemoteObject(); 
remoteObject.endpoint = "http://localhost/to/my/amf/endpoint"; 
remoteObject.showBusyCursor = true; 
remoteObject.source = 'testing'; 
var op:AbstractOperation = remoteObject.getOperation(null); 
op.addEventListener(ResultEvent.RESULT, result); 
op.send(); 

public static function result(event:ResultEvent):void{ 

    trace(event.result); 
    trace(Class(getDefinitionByName(getQualifiedClassName(event.result)))); 
    Alert.show(event.result.toString()); 

} 

問題は結果が戻っObjectProxyなくRequestとして入力するということです。私は間違って何をしていますか?

答えて

2

コードベースのどこかでクラスへの参照が1つ以上あることを確認してください。

これは一般的なトラップです。特にリモートコールを最初に開発したときで、どこのコードでも実際にそのタイプを消費する前にトラップします。

クラスが参照されていない場合、クラスはコンパイルされていないため、登録されません。

多くの場合、初期の開発時に、私はStaticLinkerクラスを作成してしまいます:ところで

<s:Script> 
    var linker:StaticLinks; 
</s:Script> 

- あなたは以前に正しいです:

public class StaticLinks 
{ 
    private var request:Request; 
} 

その後、私のアプリケーションでこれを参照します前提:クラスに[RemoteObject]と注釈を付けた場合、registerClass()に電話する必要はありません。

+0

これでした!再生した後、私は 'var testing:Request;'のインスタンスを作成した場合、そのクラスが型付けされることに気付きました! – F21

1

クラスを登録するのを忘れませんでしたか?

import flash.net.registerClassAlias; 

flash.net.registerClassAlias("com.site.remote.Request", Request); 
+0

フレックスフレームワークを使用している場合は、私が読んでいるもの(http://www.roboncode.com/articles/144)や他のブログ投稿から、 'registerClassAlias'は必要ありませんが、間違っている可能性があります。 'registerClassAlias'を使用すると、オブジェクトは' Request'とタイプされますが、 'flash.net.registerClassAlias(" asdfsomegibberish "、Request);を設定すると、依然としてオブジェクトがリクエストとして返されます。 – F21