Как сопоставить класс PHP DateTime с классом ActionScript/Flex Date с помощью Zend Framework AMF

Предыстория

Хорошо, я из тех парней, которые НИКОГДА не задают вопросов и которые обычно могут найти то, что мне нужно, из существующих вопросов или форумы .... но, увы, я провел последние несколько дней, пытаясь понять это, и получил очень мало существующей информации.

Я использую Flash Builder 4.6 для PHP Premium для создания приложения Flex, использующего возможности PHP Zend Frameworks AMF для сопоставления классов из PHP во Flex и использования их в качестве объектов для отправки туда и обратно вместо использования XML или JSON. Прямо сейчас я делаю все это на одной локальной машине для удобства.

Проблема

У меня нет проблем с сопоставлением моих собственных пользовательских классов PHP с классами ActionScript/Flex, но я не могу ни за что сопоставить PHP-класс DateTimeс ActionScript Датакласс. Я где-то читал, что он автоматически сопоставляет объекты DateTimeс объектами Date, но я никогда не заставлял его работать.

Как ни странно, я могу заставить его работать, если заменю все экземпляры, в моем случае, valueObjects.DateTime(автогенерируемый класс ActionScript) на Dateв Класс _Super_Foo.as, имеющий свойство DateTime.По сути, это заставляет Flex интерпретировать данные этого свойства как Date. Однако, поскольку все файлы _Super_XXX.asявляются файлами, автоматически сгенерированными Flex, они перезаписываются каждый раз, когда я обновляю или редактирую ЛЮБУЮ службу PHP, на которую ссылается Flex в Flash Builder.

Замечания

Конечно, я мог бы сделать это быстрым и грязным способом, сохранив переменную в виде строки (она исходит из MySQL в поле DateTime), а затем просто создать несколько функций для преобразования ее в 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("Дата", "ДатаВремя");
    
  • вместо этого используется объект Zend_Date

    $foo->date = new Zend_Date($blah);
    
  • и после попытки явного сопоставления

    $server->setClassMap("Date", "Zend_Date");
    
  • изменение, которое я в настоящее время работаю в файле _Super_Foo.as(который часто перезаписывается)

    private var _internal_date : valueObjects.DateTime; // пользовательский объект
    

    -

    частная переменная _internal_date : Дата; // родной объект
    

    Мне просто нужно, чтобы это делалось автоматически, как я и читал.

6
задан walkingbrad 14 March 2012 в 07:47
поделиться