Фон
Хорошо, я один из тех парней, которые НИКОГДА не задают вопросы и которые обычно могут найти то, что мне нужно, из существующих вопросов или форумов .... но, увы, я провел последние несколько дней, пытаясь выяснить это, и пришел очень мало существующей информации.
Я использую Flash Builder 4.6 для PHP Premium для создания приложения Flex, использующего возможности AMF PHP Zend Frameworks для отображения классов из PHP в Flex и использования их в качестве объектов для отправки туда и обратно вместо использования XML или JSON. Прямо сейчас я делаю все это на одной локальной машине для удобства.
Выпуск
У меня нет проблем с отображением моих собственных пользовательских классов PHP в классы ActionScript / Flex, но я не могу на всю жизнь сопоставить класс DateTime
PHP с классом ActionScript Date
. Я читал в другом месте, что он автоматически сопоставляет 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("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
Мне просто нужно сделать это автоматически, как я прочитал, должно.