Ağu
25
2009

Flex ile amfphp kullanmak

Flex içinden veritabanına erişebilmek veritabanında işlem yapabilmek için server tarafında çalışacak olan bir yazılım diline ihtiyacımız var. Ben php kullanıyorum. Tabiki yakında asp de lazım olacak farklı işler için onu da öğrenmek lazım.

Flash, flex için doğan bu ihtiyaçtan ötürü amfphp geliştirilmiş. Bu ara script ile veriler 10 kat daha hızlı iletiliyor ve alınıyor. (tabi bu hız sizin sql sorqularınıza göre değişiklik gösterecektir.) tek yapmanız gereken php dosyanızı sınıf şeklinde hazırlamak. Başka türlü bir verim alamazsınız amfphp den.

Öncelikle şu adresteki amfphp dosyamızı bilgisayarımıza indirip localhostta uygun bir yere çıkartıyoruz. Daha sonra çıkarttığımız dosyaya şu adres ile ulaşıp (127.0.0.1 yerine localhost yazarsanız da sonuç değişmez bu benim tercihim :))“http://127.0.0.1/cikartiginiz_dosyanin_adi/browser/” tarayıcımızla ulaşıp karşımıza gelen ekranda hiçbir şeye dokunmadan “Save” diyoruz. (ben amfphp isimli bir dosyaya çıkarttım).

1

Artık kullanıma hazır. Soldaki menüden hazırladığımız sınıflara ulaşabilir arayüz üzerinden direkt olarak bu sınıflara erişebilir hatta kullanabilir sonuçlarını görebiliriz.

Peki php de nasıl sınıf yazacağız. Aslında çok basit. Ben sadece basitçe göstereceğim. Siz sonra geliştirisiniz. Sınıf dosyalarımızı services isimli klasörde saklamamız gerekiyor.  küçük birkaç not eğer sınıf içinde sınıfımızla aynı ismi taşıyan bir fonksiyonumuz varsa bu otomatik olarak yapılandırıcı fonksiyon olarak atanır ve ilk olarak bu fonksiyon çalışır. Örneğin veritabanı gerektiren uygulamalarınızda veritabanı bağlantılarınızı bu fonksiyon içine tanımlayabilirsiniz.

PHP:
  1. <?php
  2. class deneme1 {
  3.     function ilkdeneme($veri) {
  4.         return "Gönderdiğiniz  veri -> " . $veri;
  5.     }
  6. }

Bu şekilde ilk sınıfımızı oluşturduk. Browser panelimizi refresh ettiğimizde karşımıza sınıfımız gelecektir.
Gördüğünüz gibi sınıfımız karşımızda ve direk kullanıma hazır.

2

Ekrandaki text alanına herhangi bir şey yazıp call diyerek test edebiliriz.

Gelelim Flex tarafına.
Öncelikle yeni bir flex Project oluşturup src dizinine bu adresten indireceğiniz xml dosyasını koyuyoruz. Bu dosya flex in amfphp ile iletişiminde hayati rol oynuyor bizim için. Burada dikkat etmemiz gerekn nokta şu dosya içerisinde bir yeri amfphp yi attığımız yere göre kendimiz düzeltmeliyiz (benim dosyamı indirdiğiniz için benim dosyanın yolu yazıyor.)
<endpoint uri=”http://127.0.0.1/sizin_amfphp_icerigini_cikarttiginiz_klasor_ismi/gatewat.php”/>

Aşağıdaki örnek görüntüde daha iyi göreceksiniz değiştirmeniz gereken yeri.

3

Daha sonra flex navigatörden oluşturduğumuz projeye sağ tıklayıp “Properties” i seçiyoruz.

4

Buradan “Flex Compiler” seçeneğine tıklayarak karşımıza gelen text alanına şunları ekliyoruz. Parantezler içindeki bölüm (evet en başta boşluk var)

( -services "services-config.xml") son olarak görüntü aşağıdaki gibi olmalı.

5

Bu kısmıda Apply ve OK diyerek geçtikten sonra artık kodlamaya geçebiliriz. Çok karışık değil bunları bi kere yapacağız gerisi sınıf dosyasını ve flex uygulamamızı geliştirdikçe gelişecek…ayrıca bunları bir kere yapınca kopyala yapıştır ile diğer projelerinizede aktarabilirsiniz ben öyle yapıyorum J

Öncelikle çalışma alanımıza bir adet TextInput, bir adet Button ve bir adet label yerleştiriyoruz. textInput’a id olarak “gonderilenVeri“ yazıyoruz. Butona da “gonder” id sini verelim.. Butona tıklandığında “veriGonder” fonksiyonunu çalıştırmasını söyleyelim.  Ve uygulamamıza amfphp yi remoteobject olarak ekliyelim. Bu durumda

Sonuç olarak:

Actionscript:
  1. &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
  2. &lt;mx:Application xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot;
  3.                 layout=&quot;absolute&quot;&gt;
  4.     &lt;mx:Script&gt;
  5.         &lt;![CDATA[
  6.             import mx.controls.Alert;
  7.             import mx.rpc.events.FaultEvent;
  8.             import mx.rpc.events.ResultEvent;
  9.  
  10.             private function veriGonder(e:MouseEvent):void
  11.             {
  12.                 //yapılacak  işlemler.
  13.             }
  14.             private function ilkDenemeSonuc(e:ResultEvent):void
  15.             {
  16.                 //yapılacak  işlemler.
  17.             }
  18.  
  19.             private function hata(e:FaultEvent):void
  20.             //hata döndüren handler....
  21.             {
  22.                 Alert.show(&quot;Hata  Kodu:\n&quot; + e.fault.faultCode + &quot;\n\n&quot; + &quot;Hata  Mesajı:\n&quot; + e.fault.faultString + &quot;\n\nHata Detayı:\n&quot; + e.fault.faultDetail);
  23.             }
  24.         ]]&gt;
  25.     &lt;/mx:Script&gt;
  26.     &lt;mx:RemoteObject id=&quot;amf&quot;
  27.                      fault=&quot;hata(event)&quot;
  28.                      showBusyCursor=&quot;true&quot;
  29.                      source=&quot;deneme1&quot;
  30.                      destination=&quot;amfphp&quot;&gt;
  31.         &lt;mx:method name=&quot;ilkdeneme&quot;
  32.                    result=&quot;ilkDenemeSonuc(event)&quot;/&gt;
  33.     &lt;/mx:RemoteObject&gt;
  34.     &lt;mx:TextInput id=&quot;gonderilenVeri&quot;
  35.                   x=&quot;120&quot;
  36.                   y=&quot;10&quot;/&gt;
  37.     &lt;mx:Button id=&quot;gonder&quot;
  38.                x=&quot;167.5&quot;
  39.                y=&quot;40&quot;
  40.                label=&quot;Gönder&quot;
  41.                click=&quot;veriGonder(event)&quot;/&gt;
  42. &lt;/mx:Application&gt;

Burada RemoteObject kısmını açıklayacak olursak; id ile RemoteObject nesnemize bir id veriyoruz daha sonra bu isim ile ulaşacağız kendisine. fault ile gönderim ya da alım sırasında bir hata oluştuğunda tetiklenecek olan fonksiyonu belirledik. Burada hata fonksiyonu hata kodunu hata mesajını ve deyaını bize alert olarak gösterecektir. showBusyCursor ile veri alışverişi sırasında flexe özgü bekleme cursor unun gösterilmesini sağlıyoruz. Source ise amfphp deki sınıf dosyamızın adı. Destination ise amfphp dosyamızın bulunduğu hedef klasör benim bilgisayarımda bu klasörün adı amfphp. Sınıf içerisinde tanımladığımız fonksiyonlara erişmek için RemoteObject nesnesi tagları arasına method taglarını yazıyoruz. Burada ilkdeneme methodumun adını (Dikkat: aynı zamanda php deki fonksiyon ismi)result ise bu method dan dönen sonuçların hangi fonksiyona aktarılacağını gösteriyor.

Burada dikkat edeceğimiz ikinci nokta şu: tanımladığımız fonksiyonlara gelen verilerin türleri. Hata fonksiyonunda FaultEvent tetiklenir.  ilkDenemeSonuc fonksiyonunda ResultEvent tetiklenir.
Şimdi de veriGonder fonksiyonumuza kodlarımızı yazalım.

amf.getOperation("ilkdeneme").send(gonderilenVeri.text);

Burada yaptığımız şey şu: ilk deneme isimli methoda gonderilenVeri deki veriyi gönderdik. Hangi methoda veri göndereceksek bu şekilde verimizi gönderebiliriz. İstediğimiz kadar veri gönderebiliriz. Sadece aralarına virgül koymamız yeterli. Tabi php tarafında da bu verileri karşılamamız lazım ki sonra sen 3 gönderdim ama bu tarafta 1 bekleniyordu hataları almayasınız.
Dönen veriyi ekranda göstermek için ilkDenemeSonuc fonksiyonuna şu kodları yazıyoruz:

Alert.show(e.message.body.toString(),"Dönen Veri");

Yani e ye dönen mesajın gövdesindeki değeri stringe çevir ve alert ile göster dedik. Fonksiyonlarımızın son halleri şu şekilde oldu:

Actionscript:
  1. private function veriGonder(e:MouseEvent):void
  2. {
  3.     amf.getOperation(&quot;ilkdeneme&quot;).send(gonderilenVeri.text);
  4. }
  5.  
  6. private function ilkDenemeSonuc(e:ResultEvent):void
  7. {
  8.     Alert.show(e.message.body.toString(), &quot;Dönen  Veri&quot;);
  9. }

Artık çalıştırabiliriz. Burada güzel olan şu dosyanızın uzantısı html olarak kalıyor dosyanızı localhost içersine aymanıza gerek yok çift tıklayarak çalıştırdığınızda o kendi dosyayı bulacaktır artık. Service-config.xml dosyası bu işe yarıyor. Sonucu hep birlikte görelim:

6

Evet sonuc başarılı. İlk veri alış verişini gerçekleştirdik. Bu olayı geliştirmek size kalıyor. Sorularınızı bana iletebilirsiniz. Aşağıdaki linkten uygulamanın dosyalarına erişebilirsiniz. (uygulama zip halinde bunu flex içersine import etmeniz gerekiyor. nasıl yaparım diyorsanız buyurun sizi şöyle alalım.)

Buradan indirelim...

Related Posts

About the Author:

2010 Dokuz Eylül Mezunu | Flash/Flex Developer | Actionscript Lover | Addicted to Php/MySql | Junior Android&iOS Developer

1 Comment + Add Comment

Leave a comment

Kategoriler