SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

Zend Framework入門

PHPアプリからFlashコンテンツにアクセスしよう - Zend_Amf -

Zend Frameworkによる実践的なPHPアプリケーション開発 21


ダウンロード sample.zip (205.0 KB)

サーバ側のコードを理解する

 次に、これを受けるZend_Amfの方の処理を見ていきましょう。まずは、AMFのリクエストを直接受けるコントローラです(リスト5)。

[リスト5]Flashからの入力を受け付ける部分(IndexController.php)
<?php
...

//(1) メソッドとして登録する関数
//AMFの処理をするためのメソッド
function getString()
{
  return "サンプル文字列\n";
}

//(2) メソッドを提供するクラス
//AMFの処理をするためのクラス
class MyService
{
  public function getTime()
  {
    return date("y/m/d H:i:s");
  }
}

class IndexController extends Zend_Controller_Action
{
...
    //(3) index/amf で呼び出される処理
    public function amfAction()
    {
      //(3-1)通常の描画を無効にする
      $this->_helper->viewRenderer->setNoRender(true);

      //(3-2)Zend_Amf_Serverのインタンスの作成
      $server = new Zend_Amf_Server();
      //(3-3)MyServiceクラスを登録
      $server->setClass('MyService');
      //(3-4)getHelloString関数を登録
      $server->addFunction('getHelloString');
      //(3-5)/codezine/zendapps/servicesフォルダ配下のクラスを登録
      $server->addDirectory('/codezine/zendapps/services');
      //(3-6)オブジェクト間の対応関係
      $server->setClassMap('DataAS', 'DataPHP');

      //(3-7)リクエストを処理
      $result = $server->handle();
      //(3-8)結果を返す
      echo $result;
    }
}

 リスト4の(1-3)にあったように、Flashアプリが呼び出すアドレスは「http://localhost/index/amf」となります。この場合、実際に対応するのは(3)にあるIndexControllerクラスのamfActionメソッドになります。

 このメソッドは通常の描画を行うのではなく、Flashアプリからのリクエストに答えるためのものなので、(3-1)で通常の描画を行わないように設定しておきます。この次の(3-2)でZend_Amf_Serverのインスタンスを作成した後、(3-3)と(3-4)、(3-5)ではそれにメソッドの追加を行なっています。

 (3-3)では(2)のMyServiceクラスのメソッド(この場合はgetTimeメソッドのみ)を登録しています。ここで登録されたメソッドは「MyService」サービスの「getTime」メソッドのように扱われます。

 (3-4)では(1)のgetHelloString関数をメソッドとして登録しています。このように指定した場合は、サービス名にかかわらずメソッド名が一致したらこのメソッドが呼び出されるようになります。

 また、(3-5)ではメソッドが登録されているクラスの定義ファイルが置かれているフォルダを指定しています。このようにクラスの定義ファイルを定義しておくと、AMFを処理するためのメソッドを、このフォルダにも探しに行くようになります。例えば、サンプルのようにHelloWorldサービスのメソッドが呼ばれた場合には、「/codezine/zendapps/services」の中に「HelloWorld.php」がないかを探してくれるようになります。

 (3-6)はFlashとPHPの間でのクラスの対応関係を指定しています。今回の例ではオブジェクトのやりとりをしているので、このような指定が必要になります。こちらについては後で詳しく説明します。

 最後に(3-7)のhandleで実際に処理を行なった後、その結果を(3-8)でFlashアプリに返しています。

 これを実際に処理しているのはHelloWorldクラスのgetHelloStringメソッドです。

[リスト6]実際に処理する部分(HelloWorld.php)
<?php

class HelloWorld
{
  /**
   * @param DataPHP $param
   * @return string
   */
  public function getHelloString($param)
  {
    return $param->data." Test for codezine\t".date("y/m/d H:i:s")."\n";
  }
}

 これはDataPHP型(後述)のオブジェクト受け取り、そこから取り出した文字列を加工して(具体的には時刻などの文字列を追加して)、文字列を返すメソッドになっています。

 リスト3からリスト6の一連の処理の流れをまとめると、

  1. ユーザーがFlashアプリのボタンを押す
  2. 「http://localhost/index/amf」に対してAMF3でgetHelloStringメソッドをリクエスト
  3. 登録されたメソッドのうち、HelloWorldクラスのgetHelloStringメソッドが実行される
  4. getHelloStringメソッドの結果がFlashアプリに送り返される
  5. その結果をテキストエリアに追加

 のようになっています。

次のページ
おわりに

修正履歴

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

Zend Framework入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

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

WINGSプロジェクト 風田 伸之(カゼタ ノブユキ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4030 2009/12/03 12:15

イベント

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

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

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

メールバックナンバー