PHP + Actionscript AMF (через SabreAMF) — Как вернуть массив PHP и сопоставить его с массивом/объектом в actionscript

Небольшое примечание: мои навыки работы со сценарием действий — слабый соус... Хотя я не обезьяна, поэтому, получив правильный совет, я могу во всем разобраться:

Итак, мы используем SabreAMF для обработки некоторых вызовов AMF к нашему серверу.

Вещи работают хорошо.

Сервер обратного вызова и часть сценария действий работают, как и ожидалось.

Единственный вопрос, который мы хотели бы решить:

В настоящее время, когда нам нужно вернуть набор (массив) данных, мы просто объединяем его, делая что-то вроде этого (в конце php):

return 'VALUE1|VALUE2|VALUE3';

А затем на стороне actionscript мы делаем что-то вроде этого:

var parts:Array=result.split('|');

/* parts[0] = VALUE1 , parts[1] = VALUE2 , parts[2] = VALUE3 */

Вышеприведенное работает просто отлично, но я не могу не думать, что должен быть более чистый способ делать что-то.

Мы хотели бы сделать следующее:

Конец PHP (SabreAMF):

 return array('Param1'=>'Value1','Param2'=>'Value2','Param3'=>'Value3');

И автоматически сопоставьте эти данные с массивом или объектом на стороне actionscript. Казалось бы логичным, что можно возвращать массивы и правильно отображать их (и автоматически, скрестив пальцы) на стороне сценария действия.

Итак, вопрос следующий:

При использовании SabreAMF для обработки вызовов ActionScript AMF к серверной части на основе PHP, возможно ли вернуть массив и заставить обработчик ActionScripts AMF автоматически сопоставлять набор данных и массив (в идеале) или объект без использования конкатенации?

Объединение швов похоже на хак.

Спасибо!


person anonymous-one    schedule 30.12.2012    source источник


Ответы (3)


Отправьте его как строку через JSON с помощью json_encode(), затем в AS3 используйте любую библиотеку JSON, чтобы преобразовать ее в правильную структуру данных. Я думаю, что это самый простой способ сделать это... или, может быть, я ошибаюсь, и кто-то даст нам лучший ответ.

РЕДАКТИРОВАТЬ: Вы также можете отправить его в виде строки XML, хотя мой коллега по AS3 всегда настаивает на использовании JSON в качестве более простой альтернативы.

person shark555    schedule 30.12.2012
comment
хотя, возможно, немного тяжелее, чем простой шпагат... это кажется намного чище. благодаря. - person anonymous-one; 30.12.2012

Вы можете делать то, что хотите, используя AMF. Flash прозрачно интерпретирует полученные данные. Тем не менее, вы можете проверить AmfPHP, так как Sabre AMF не поддерживается. (отказ от ответственности: я запускаю AmfPHP).

JSON и XML тоже работают. Настройка AMF, возможно, потребует немного больше усилий, в зависимости от того, что вы знаете. Его основными преимуществами являются экономия трафика и строгая типизация, поэтому решите, что лучше для вас.

http://www.silexlabs.org/amfphp/

person Ariel Sommeria-Klein    schedule 03.01.2013

Расширение PHP AMF3 может быть включено в ваш проект намного быстрее.

Проверьте это — https://github.com/neoxic/php-amf3

// Have your data
$data = array('Param1'=>'Value1','Param2'=>'Value2','Param3'=>'Value3');

// Encode into AMF3
$str = amf3_encode($data);

// Print to stdout (or use your way to pass it to the client)
print $str;
person neoxic    schedule 21.02.2013