昨天,根據此question,我成功地使用Zend_AMF從PHP應用程序向Flex前端發送了輸入對象。將AMF輸入的對象從flex返回到PHP
我現在面臨的問題是,我想發送一個從flex到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中對應的類:
<?php
namespace modules\testing;
class CTest{
var $_explicitType = 'CTest';
var $stuff1;
var $stuff2;
}
在Flex中,我送像這樣的對象:
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看到的類名。如果我使用命名空間表示法,Zend_AMF會看到modulestestingCTest
,因爲所有的斜槓都被刪除了。
但我怎樣才能得到這與PHP命名空間的工作?
如果我可以我會投票你兩次:)我有關發送對象從PHP到Flex的相關問題:http://stackoverflow.com/questions/9555397/flex-is-deserializing-generic-objects-from- Zend的-AMF-INSTEAD-OF-嚴格類型的-OB – pixel