昨天,根据这个问题,我成功地使用 Zend_AMF 将类型对象从 PHP 应用程序发送到 flex 前端。
我现在面临的问题是我想将一个类型化对象从 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;
}
在 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 命名空间一起使用呢?