昨日、Zend_AMFを使用して、questionとしてPHPアプリケーションからフレックスフロントエンドに型付きオブジェクトを送信することに成功しました。フレックスからPHPへの型付きオブジェクト
私が直面している問題は、フレックスからPHPおよびPHP側で型付きオブジェクトをstdClass
の代わりに型付きオブジェクトとして受け取れるようにすることです。ここで
はフレックスでクラスです:
package com.mysite
{
[Bindable]
[RemoteClass(alias="CTest")]
public class CTest
{
public var stuff1:String;
public var stuff2:String;
public function CTest()
{
}
}
}
そして、これはPHPで対応するクラスです:Flexで
<?php
namespace modules\testing;
class CTest{
var $_explicitType = 'CTest';
var $stuff1;
var $stuff2;
}
、私はそうのようなオブジェクトを送っています:
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(new CTest());
PHP側では、オブジェクトは$parameters
という変数に取り込まれます。 Iその後、結果をファイルに書き込むためにそれを使用しますprint_r:
$z = print_r($parameters, true);
$s = fopen('D:\test.txt', 'w+');
fwrite($s, $z);
fclose($s);
と分かるように、結果は型なし戻ってくるとstdClass
オブジェクトです:]
Array
(
[0] => stdClass Object
(
[stuff1] =>
[stuff2] =>
)
)
いくつかのテストの後、私はPHPオブジェクトから名前空間を削除し、それをグローバル名前空間に移動しました。これは問題を解決したようです。私はRemoteClass
を\modules\testing\CTest
に設定しようとしましたが、またmodules.testing.CTest
に設定しようとしました。 $_eplicitType
を両方のテストで同じ値に設定しました。
modules.testing.CTest
を使用すると、これはZend_AMFが見るクラス名になります。名前空間記法を使用すると、すべてのスラッシュが取り除かれるため、Zend_AMFはmodulestestingCTest
と見なします。
しかし、これをPHPネームスペースでどのように動作させることができますか?
もし私があなたに2倍の投票権を与えることができたら:PHPからFlexへのオブジェクトの送信に関する私の関連する質問:http://stackoverflow.com/questions/9555397/flex-is-deserializing-generic-objects-from- zend-amf-strict-of-strictly-typed-ob – pixel