SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Adobe Developer Connection(AD)

Eclipseを使用したFlex+PHP開発

  • X ポスト
  • このエントリーをはてなブックマークに追加

Flex+PHPアプリケーションの構築

 プロジェクトが適切に設定されたので、今度は、Zend AMFを利用してPHPスクリプトと通信する、小さなFlexアプリケーションを開発することにします。Zend AMFを使用することで、Flexデベロッパーは、FlexからPHPクラスへのリモートプロシージャーコールを実行できます。これはオープンソースプロジェクトであるZend Frameworkの一部です。

PHPコードの作成

 Zend AMFを利用すれば、FlexアプリケーションからPHPクラスのメソッドコールを行えます。ただし、呼び出すPHPクラスは、必ずサーバーのWebルートに配置されている必要があります。

 PHPコードを記述する際に、この作業をZend Studioから行えれば便利なのは言うまでもありません。しかしここで問題になるのは、開発対象のプロジェクトファイルがサーバーのルートフォルダに配置されていないことです(つまり、Webサーバールートフォルダ内にPHPクラスを作成した場合は、Flex PHPプロジェクト上で、このクラスを確認することができません)。

 幸運にも、この問題に対しては簡単な解決策があります。Eclipseでは、プロジェクトに外部フォルダをリンクできます。

 まず、Webサーバールート内にzendamf_remoteという名前のフォルダを作成します。Zend Studioの作業画面に戻り、表示がFlex開発パースペクティブになっていることを確認します。そして、プロジェクト名を右クリックし、メニューから[New(新規)]-[Other(その他)]を選択します。表示されたウィザード上の[Folder(フォルダ)]を選択し、[Next(次へ)]ボタンをクリックします。

 [New(新規)]ウィザードが開始されたら、[Advanced(拡張)]ボタンをクリックして、Webサーバールートフォルダを参照し、zendamf_remoteフォルダを選択します(図10を参照)。[Finish(終了)]ボタンをクリックすると、プロジェクト内にzendamf_remoteという名前のフォルダが新規作成されているはずです。

図10. リンクリソースの作成
図10. リンクリソースの作成

 次に、EclipseでPHPパースペクティブを選択し(図11を参照)、zendamf_remoteフォルダを右クリックして、[新規]-[その他...]を選択します。

図11. PHPパースペクティブの選択
図11. PHPパースペクティブの選択

 [New(新規)]ウィザードが開いたら、PHPノードからクラスエントリを選択し、[Next(次へ)]ボタンをクリックします。[New(新規)]ウィザードで、ファイル名(MyService.php)とクラス名(MyService)を入力した後、[Finish(終了)]ボタンをクリックします(図12を参照)。このステップを繰り返して、VOAuthorという名前の別のクラスを作成します。

 最初に、データがいくつか入ったテーブルをMySQLデータベースサーバーに追加します。次のコードが使用できます。

CREATE TABLE `authors_aut` (      `id_aut` int(11) NOT NULL 
auto_increment,      `fname_aut` varchar(255) NOT NULL, 
`lname_aut` varchar(255) default NULL,      
PRIMARY KEY  (`id_aut`),      
UNIQUE KEY `fname_aut` (`fname_aut`,`lname_aut`) ) 
ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; 
INSERT INTO `authors_aut` VALUES (1, 'Dantes', 'Alighierie');
INSERT INTO `authors_aut` VALUES (2, 'William', 'Shakespeare'); 
INSERT INTO `authors_aut` VALUES (3, 'Umberto', 'Eco'); 
INSERT INTO `authors_aut` VALUES (4, 'Niccolo', 'Machiavelli');

 ここでしようとしているのは、MySQLデータベースのテーブルからすべてのレコードを取得するPHPコードと、同じテーブルの1つのレコードを更新するコードを作成することです。このために、MyServiceというPHPクラスを作成し、このクラスをFlexから呼び出します。このクラスは、getData()とsaveData()の2つのメソッドを提供します。

 次に、テーブルの1つの行のデータモデルの役割を果たすVOAuthorというPHPクラスを作成します。そこで、これらのファイルすべてにコードを追加してみます。

図12. PHPクラスの作成
図12. PHPクラスの作成

 Eclipseによって新規ファイルが生成され、編集可能な状態で開かれます。次に示すのはMyServiceクラスのコードです(実際のデータベースの設定に応じて、接続情報を変更する必要があります。このためには、クラスの上部にある4つの定数を参照してください)。

<?php
require_once 'VOAuthor.php';

//conection info
define(":DATABASE_SERVER":, ":localhost":);
define(":DATABASE_USERNAME":, ":mihai":);
define(":DATABASE_PASSWORD":, ":mihai":);
define(":DATABASE_NAME":, ":flex360":);

class MyService {

  /**
   * Retrieve all the records from the table
   * @return an array of VOAuthor
   */
  public function getData() {
    //connect to the database.
    //we could have used an abstracting layer for connecting to the database.
    //for the sake of simplicity, I choose not to.
    $mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);
    mysql_select_db(DATABASE_NAME);
    //retrieve all rows
    $query = ":SELECT id_aut, fname_aut, lname_aut FROM authors_aut ORDER BY fname_aut":;
    $result = mysql_query($query);
    $ret = array();
    while ($row = mysql_fetch_object($result, ":VOAuthor":)) {
      $ret[] = $row;
    }
    mysql_free_result($result); 
    return $ret;
  }
  /**
   * Update one item in the table
   * @param VOAuthor to be updated 
   * @return NULL
   */
  public function saveData($author) {
    if ($author == NULL)
      return NULL;
    //logMe($author);
    //connect to the database.
    $mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);
    mysql_select_db(DATABASE_NAME);
    if ($author->id_aut > 0) {
      //save changes
      $query = ":UPDATE authors_aut SET fname_aut='":.$author->fname_aut.":', lname_aut='":.$author->lname_aut.":' WHERE id_aut=":.  $author->id_aut;
    } else {
      //add new record
      $query = ":INSERT INTO authors_aut (fname_aut, lname_aut) VALUES ('":.$author->fname_aut.":', '":.$author->lname_aut.":')":;
    }
    $result = mysql_query($query);
    return NULL;
  }
  
}
?>

 次に、データモデルであるValueオブジェクトのコードを作成します。ファイルVOAuthor.phpを選択し、次のコードを貼り付けます。

<?php class VOAuthor {      public $id_aut;      public $fname_aut;      
public $lname_aut; } ?>

 見ればわかるように、このクラスは非常に単純です。単にテーブルのフィールドと同じメンバーを提供するだけです。リモーティングを使用する場合、データが自動的に適切な型にキャストされます。例えば、MyService.getData()メソッドはVOAuthor PHPオブジェクトの配列を返します。ただし、後で見るように、Flexでは結果はVOAuthor ActionScriptオブジェクトの配列です。

Flexアプリケーションの作成

 PHPコードの準備が整ったので、次に、PHPクラスを呼び出すFlexコードを作成することにします。ここで作成するのは、データグリッドを使用して、データと1行編集用のフォームを表示するFlexアプリケーションです。

 まず、Eclipseの画面右上のアイコンをクリックし、画面がFlex開発パースペクティブになっていることを確認します。幸い、Flash Builder 4には、PHPサービスを利用する場合に便利な新しいウィザードがいくつか用意されています。これらのウィザードは、新しいデータとサービスビューからアクセスできます(図13を参照)。このビューが表示されていない場合、[Window(ウィンドウ)]-[Other Views...(他のビュー...)]を選択し、Flash Builderノードからデータとサービスエントリを選択します。

図13. データとサービスビュー
図13. データとサービスビュー

 次に、flex_php.mxmlファイルを開き、デザインビューを選択します。コンポーネントビューからDataGridをシーンにドラッグして、DataGridコンポーネントを追加します(図14を参照)。

図14. DataGridコンポーネントの追加
図14. DataGridコンポーネントの追加

 これで、MyService.phpクラスを利用するクライアントサイドサービスを作成するための最初のウィザードを使用する準備ができました。データとサービスビューから、データとサービスに接続リンクをクリックします。ウィザードが開いたら、PHPを選択し(図15を参照)[Next(次へ)]ボタンをクリックします。

図15. [Connect to Data/Service...(データとサービスに接続...)]ウィザードの1ページ目
図15. [Connect to Data/Service...(データとサービスに接続...)]ウィザードの1ページ目

 ウィザードの2ページ目で[Browse...(参照...)]ボタンを使用して、PHPサービス「MyService.php」を選択します(図16を参照)。[Next(次へ)]ボタンをクリックすると、警告ウィンドウがポップアップします(図17を参照)。

 [Data/Service(データとサービス)]ウィザードは、Zend FrameworkのZendAMF部分を使用して、PHPに対するリモーティングを使用可能にします。[OK]をクリックすると、ウィザードがフレームワークをインストールします。

 Zend Frameworkがインストールされると、ウィザードがPHPサービス(MyService.php)を分析し、PHPクラスのパブリックメソッドが表示されます(図18を参照)。[Finish(完了)]ボタンをクリックします。

図16. PHPサービスクラスの選択
図16. PHPサービスクラスの選択
図17. Zend Frameworkのインストール
図17. Zend Frameworkのインストール
図18. PHPサービスの分析
図18. PHPサービスの分析

次のページ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Adobe Developer Connection連載記事一覧

もっと読む

この記事の著者

Mihai Corlan(Mihai Corlan)

アドビ プラットフォームエバンジェリスト。以前は、コンピュータサイエンティストとしてFlex Builderのプロジェクトに従事。アドビ入社以前は、InterAKT Online(2006年にアドビと合併)でシニアデベロッパーとして、e-shop、ニュースレター、アンケートやWeb開発者向けのRAD...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5296 2010/08/09 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング