昨日、この質問に従って、Zend_AMFを使用してPHPアプリケーションからflexフロントエンドに型付きオブジェクトを送信することに成功しました。
私が今直面している問題は、型付きオブジェクトをフレックスからPHPに送信し、PHP側では、ではなく型付きオブジェクトとして受信できるようにすることですstdClass
。
これがflexのクラスです:
package com.mysite
{
[Bindable]
[RemoteClass(alias="CTest")]
public class CTest
{
public var stuff1:String;
public var stuff2:String;
public function CTest()
{
}
}
}
そしてこれはPHPの対応するクラスです:
<?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
。次に、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に表示されるクラス名になります。modulestestingCTest
名前空間表記を使用すると、すべてのスラッシュが削除されるため、Zend_AMFはを認識します。
しかし、どうすればこれをphp名前空間で機能させることができますか?