7

バックグラウンド

わかりました、私は決して質問をせず、たいてい既存の質問やフォーラムから必要なものを見つけることができる人の 1 人です....現存する情報が少ない。

PHP Premium 用の Flash Builder 4.6 を使用して、PHP Zend Frameworks の AMF 機能を使用してクラスを PHP から Flex にマップし、それらをオブジェクトとして使用して XML や JSON を使用する代わりに送受信する Flex アプリケーションを構築しています。現在、簡単にするために、すべてを単一のローカル マシンで実行しています。

問題

DateTime独自のカスタム PHP クラスを ActionScript/Flex クラスにマッピングするのに問題はありませんが、 PHPクラスを ActionScript クラスにマッピングすることはできませんDateDateTimeオブジェクトをオブジェクトに自動的にマップすることを他の場所で読んだことがありますが、機能Dateするようになったことはありません。

奇妙なことに、私の場合valueObjects.DateTime(自動生成された ActionScript クラス) のすべてのインスタンスを、プロパティを持つクラスに置き換えると、機能するようDateになります。これにより基本的に、Flex はそのプロパティのデータを. ただし、すべてのファイルは Flex によって自動生成されたファイルであるため、Flash Builder で Flex がリンクしている PHP サービスを更新または編集するたびに書き換えられます。_Super_Foo.asDateTimeDate_Super_XXX.as

備考

もちろん、変数を文字列として保持することでこれを迅速かつ汚い方法で行うことができます (DateTime フィールドの MySQL からのものです)。その後Date、クライアント側でオブジェクトに変換する関数をいくつか作成するだけですが、より永続的なものが必要です。そして安定した解決。

例:

<?php
class Foo {  
  public $id; // int
  public $name; // string
  public $date; // DateTime
  public $bar; // custom object
}
?>

---> に行く必要があります

package {
  class Foo {
    public var id:int;
    public var name:String;
    public var date:Date; // native class
    public var bar:Bar;
  }
}

しかし、私は得ています

package {
  class Foo {
    public var id:int;
    public var name:String;
    public var date:DateTime; // custom class
    public var bar:Bar;
  }
}

私は次のようなことを試しました:

  • gateway.phpファイルで

    $server->setClassMap("Date", "DateTime");
    
  • 代わりにZend_Dateオブジェクトを使用する

    $foo->date = new Zend_Date($blah);        
    
  • そしてそれを明示的にマップしようとした後

    $server->setClassMap("Date", "Zend_Date");
    
  • 現在_Super_Foo.asファイルで作業している変更(頻繁に上書きされます)

    private var _internal_date : valueObjects.DateTime; // custom object
    

    private var _internal_date : Date; // native object
    

    私はそれを読んだように、これを自動的に行う必要があります。

4

3 に答える 3

0

私は通常、Zend ではなく Java で BlazeDS を使用していることを認めざるを得ませんが、Calendar オブジェクトの転送で同様の問題が発生しました (タイムゾーン データが失われるのを防ぎたかったのです)。このため、BlazeDS はいわゆる PropertyProxy をサポートしていました。これは、特定のタイプのシリアライゼーション/デシリアライゼーション プロセスを引き継ぐことができるコンポーネントです。

ZENDも同様のことをサポートすると思います。したがって、別のオプションは、実際には Zend zupport を完全な Flex タイプにすることです。少し検索したところ、Zend では用語全体が異なっているようですが、このスタックオーバーフローの記事で少し説明する必要があると思います: Zend AMF カスタム ディスパッチャー

クリス

于 2012-03-23T07:26:41.083 に答える
0

AmfPHP は自動的にマップします。http://www.silexlabs.org/amfphp/

于 2013-02-21T10:50:56.720 に答える