GAE+PHP/Rubyで拓く新世界

第4回 PHPでGAE上に社員検索アプリを作る

萩原 巧
リトルソフト株式会社

中越 智哉
株式会社ナレッジエックス

2010/3/18

GAE WebApplication Projectの作成と各種設定

 今回のアプリケーション作成で使用するEclipseプロジェクトと設定は、第2回「SQL4GでGAE+PHPを体験しよう」で使ったものを使用します。

 今回のアプリケーションは、以下の5つファイルで実現しています。PHPとSmarty側でそれぞれファイルを作成します。

 PHPのファイルは1ファイルのみです。

  • empmaint.php:
    画面遷移やデータベースからのデータ取得、更新などのアプリケーションの振る舞いを実装しているphpファイル

 以下の4つのファイルは、Smartyテンプレートファイルです。

  • empmaint.tpl:
    社員条件設定/社員登録画面のSmartyテンプレートファイル
  • empmaint_searchret.tpl:
    社員検索結果表示画面のSmartyテンプレートファイル
  • empmaint_edit.tpl:
    社員編集/社員削除画面のSmartyテンプレートファイル
  • empmaint_done.tpl:
    編集完了を知らせるSmartyテンプレートファイル

 PHPファイルは(projectRoot)/warに、Smartyテンプレートは(projectRoot)/war/templatesに配置します。


ソースコードの説明

 empmaint.phpのソースから、重要な部分のみ抜粋します。

●empmaint.php
<?
include $_SERVER["DOCUMENT_ROOT"]."/phplibs/inc.php";                 // (1)
include $_SERVER["DOCUMENT_ROOT"]."/phplibs/Smarty/Smarty.class.php"; // (1)
include_once "DB.php";                                                // (1)

class Empmaint {
(中略)
    function Empmaint (){
        $this->_smarty = new Smarty();                                         // (2)
        $this->_smarty->template_dir = $_SERVER["DOCUMENT_ROOT"].'templates';  // (2)
    }
(中略)
    function searchForm(){
        $this->createCheckBox();
        $sql = $this->createSearchSQL();
        $db = DB::connect($this->_dsn);  // (3)
        $ret = $db->query($sql);
        $arr = array();
        while ($row =& $ret->fetchRow(DB_FETCHMODE_ORDERED)) {
            $emp = null; 
            $emp["EMP_ID"] = $row[0];
            (中略)
            array_push($arr,$emp);
        }
$this->_smarty->assign('data',$arr);
        $db->disconnect();
        $this->_smarty->assign('params',$this->_params);
        $this->_smarty->display('empmaint_searchret.tpl');
    }
(中略)
php>
  1. include指定にinc.php、Smarty.class.php、DB.phpを指定します
  2. コンストラクタで、Smartyのインスタンスを設定すると共に、テンプレートのディレクトリ((projectRoot)/war/templates)を設定します
  3. Pear::DBが持つquery関数やfechRow関数が、従来の手順で使用可能です。また、Smartyが持つassign関数やdisplay関数も使用可能です

 empmaint.tplも重要な部分のみを抜粋します。

●empmaint.tpl
(前略)
    <body id="main_body">
        <div>
            <div id="form_container">
        <form id="form1" class="appnitro" method="post" action="empmaint.php">
            <ul>
                <li id="li_name">
                    <label class="description">社員名</label>
                    <span>
                    <input id="name" name="name" class="element text" 
maxlength="255" size="20" value="{$smarty.post.name|escape|default:""}"/>  // (1)
                    </span>
                </li>
                {$smarty.post.name}
                <li id="li_gender" >
                    <label class="description">性別</label>
                    <div>
                    {html_radios name=gender options=$params.gender class="element radio" selected=$smarty.post.gender} // (2)
                    </div> 
                </li>
                <li id="li_blood" >
                    <label class="description">所属</label>
                    <div>
                    <select class="element select medium" name="dept">             // (3)
                    <option value="">選択してください</option>                     // (3) 
                    {html_options options=$params.dept selected=$smarty.post.dept} // (3)
                    </select>
                        </div>
                </li>
(中略)
                    </div> 
                </li>
(後略)
  1. Smartyのpost指令でpostされた社員名を取得して、textフィールドに表示します
  2. Smartyのpost指令でpostされた性別を取得して、radioフィールドに表示します
  3. Smartyのpost指令でpostされた所属を取得して、selectフィールドに表示します

 empmaint_searchret.tpl、empmaint_edit.tpl、empmaint_done.tplは、テンプレートとして複雑なソースコードではないので省略します。

 今回のアプリケーションは分かりやすさを重視したため、PHPのフレームワークは使用していませんが、PHP4Gでもアプリケーションの規模に応じたフレームワークを導入できます。

 なお、ソースコードを含め、今回作成したアプリケーションをダウンロードできます。

 EclipseからGAEへのデプロイを行い、http://(GAEアプリのID).appspot.com/empmaint.phpにアクセスしてください。社員検索/登録画面が表示され、各種動作が正常に終了することを確認しましょう。

PHP4Gのよくある質問

 連載を通じて、PHP4Gへの質問を受けましたので、その回答とあわせて記載します。

Q1 セッションやクッキーは使用できますか?

A1 問題なく使用できます。具体的な使用例として、今回紹介したempmaint.phpに定義されているeditForm関数やupdateForm関数を参考にしてください。

Q2 PHP4Gで使っているPHPのバージョンはいくつですか?

A2 バージョンは5.2.0です。

Q3 PHPの環境などの情報を知りたいのですが。

A3 http://(GAEアプリのID).appspot.com/phplibs/phpinfo.phpにアクセスすると、phpinfoで確認できる情報が出力されます。

 今回は、アプリケーションの構築を通じて、PHP+リレーショナルデータベース+テンプレートエンジンを活用したアプリケーションが、GAE上で動作することを体感できたと思います。次回は、RailsアプリケーションをGAE上で動作させるための手順を紹介します。お楽しみに。

prev
3/3
 

Index
PHPでGAE上に社員検索アプリを作る
  Page1
ライブラリの説明
GAE上でファイル保存方法とSmartyのミスマッチ
  Page2
GAE on PHPにおけるSmartyの連携方法
Pear::DBを活用したデータアクセス
  Page3
GAE WebApplication Projectの作成と各種設定
ソースコードの説明
PHP4Gのよくある質問

index GAE+PHP/Rubyで拓く新世界

 Coding Edgeお勧め記事
いまさらアルゴリズムを学ぶ意味
コーディングに役立つ! アルゴリズムの基本(1)
 コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう
Zope 3の魅力に迫る
Zope 3とは何ぞや?(1)
 Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか?
貧弱環境プログラミングのススメ
柴田 淳のコーディング天国
 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く?
Haskellプログラミングの楽しみ方
のんびりHaskell(1)
 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう
ちょっと変わったLisp入門
Gaucheでメタプログラミング(1)
 Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう
  Coding Edgeフォーラムフィード  2.01.00.91


Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

>

Coding Edge 記事ランキング

本日 月間