Хорошо, я из тех парней, которые НИКОГДА не задают вопросов и которые обычно могут найти то, что мне нужно, из существующих вопросов или форумы .... но, увы, я провел последние несколько дней, пытаясь понять это, и получил очень мало существующей информации.
Я использую 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 : Дата; // родной объект
Мне просто нужно, чтобы это делалось автоматически, как я и читал.