Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Flex > Flex + php


Автор: AlDev 11.3.2007, 11:33
Итак, понадобиться AMFPHP:

Установка требуемого
1. Качаем AMFPHP с http://www.amfphp.org/
2. Распаковываем архив в docroot вашего проекта. Например у меня проект amfSample (для Apache):
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\amfSample
Получаем в папке amfSample несколько php файлов, such as 
gateway.php
advancedsettings.php
debuggateway.php
3. Открываем в браузере gateway:
http://localhost/amfSample/gateway.php
Если выдается:
amfphp and this gateway are installed correctly. You may now connect to this gateway from Flash.
Значит все клево и можно идти дальше. 
Если же такого не будет, открывайте gateway.php в редакторе и выставляйте ваши настройки.
Там все подробно задокументировано, по сему не буду на этом останавливаться.
4. Подробности по установке, конфигу и т.п. смотрите тут:
http://www.amfphp.org/docs/


Теперь обратимся непосредственно к вопросу создания и манипулирования объектами, которые будут доступны из Flex приложения.
Создадим класс, который будет использоваться Flex-ом:

Код

<?php
class HelloService {
  function getHello() {
    return "Hello, world!";
  }
}
?> 


И сохраним его в файле services/HelloService.php
Все? Куй. Пошли дальше:
Определим доступные для вызова из Flex методы:
Код

<?php
class HelloService {
  
  function HelloService() {
    $this->methodTable = array(
    "getHello" => array(
            "description" => "Get hello message",
            "arguments" => array(),
            "access" => "remote"
            )
    );
  }
  
  function getHello() {
    return "Hello, world!";
  }
}
?> 
 

Массив methodTable описывает доступность методов для вызова. 
Вот и все.
Теперь для просмотра существующих сервисов смотрим:
http://localhost/amfSample/browser/

Уаля. Теперь открываем Flex и фперед:

Код

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
        import mx.controls.Alert;
        import flash.net.NetConnection;
        
        private var connection:NetConnection = getConnection();
        
        private static function getConnection():NetConnection {
            var c:NetConnection = new NetConnection();
            c.objectEncoding = ObjectEncoding.AMF0;
            c.connect("http://localhost/amfSample/gateway.php");
            return c;
        }
        
        private function callGetHello():void {
            connection.call("HelloService.getHello",new Responder(resultHandler, statusHandler));
        }
        
        private function resultHandler(result:String):void {
            Alert.show("Result: "+result);
        }
        
        private function statusHandler(status:Object):void {
            Alert.show("Fault: "+status.description);
        }
        ]]>
    </mx:Script>
    <mx:Button label="call HelloService.getHello()" click="callGetHello()" />
</mx:Application>

getConnection создает NetConnection для соединения со шлюзом и говорит, что использовать старый AMF протокол (“до flash 9-й =)”).

Ну а дальше понятно.
connection.call("HelloService.getHello",new Responder(resultHandler, statusHandler));

Говорит, что надо вызвать метод getHello у HelloService. При получении успешного результата вызвать resultHandler, а при получении неуспешного – statusHandler.

Пускаем. Наслаждаемся.

© http://z3labs.com/2007/03/11/flex-php-amfphp/

Автор: AntonioBanderaz 11.3.2007, 13:54
А теперь объясни как более сложными объектами манипулировать, например передать dom документ )

Автор: AlDev 11.3.2007, 14:59
http://www.amfphp.org/docs/datatypes.html
;-)

Автор: AntonioBanderaz 11.3.2007, 16:05
Гы, ну конечно ассоцированный массив лучше в мапе бы смотрелся, но тоже ничего спа за инфу... )

Автор: Alex_B 4.10.2007, 18:18
Далаю по примеру и вот такая ошибка:

Fault: The class {HelloService} could not be found under the class path {z:\home\test2.ru\www\dbase\amfphp\services/HelloService.php}

Слеши видимо не в ту сторону, а как такое справить?

Спасибо.

Автор: AlDev 24.10.2007, 03:33
Alex_B, эм, на сервере пускать надо. откуда взялся z?

Автор: Maksys 13.6.2008, 12:50
http://www.adobe.com/devnet/flex/articles/drupal.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)