ZendFrameworkで作る『イマドキ』のWebアプリケーション

第3回 はじめてのZendFrameworkアプリケーション

この記事を読むのに必要な時間:およそ 9 分

ListController.php

<?php

class ListController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
                $this->db = Zend_Db::factory('Pdo_Pgsql', array(
                        'host'          => 'localhost',
                        'username'      => 'postgres',
                        'password'      => 'postgresql',
                        'dbname'        => 'guestbook'
                ));
    }


    public function indexAction()
    {
        /* Default action for action controller */
                $this->_forward('List');
    }

        public function listAction()
        {
                $sql = "SELECT * FROM guestbook ORDER BY id DESC";
                $rows = $this->db->fetchAll($sql);

                $this->view->rows = $rows;
        }


}

initメソッドはコントローラオブジェクトが作成される場合に自動的に実行させるメソッドです。initメソッドの

                $this->db = Zend_Db::factory('Pdo_Pgsql', array(
                        'host'          => 'localhost',
                        'username'      => 'postgres',
                        'password'      => 'postgresql',
                        'dbname'        => 'guestbook'
                ));

でZend_Dbデータベースオブジェクトを作成しています。Pdo_Pgsqlを利用してPostgreSQLデータベースへの接続を作りました。

indexActionが呼ばれたとき,つまり

  • http://localhost/list/

とリクエストされた時には,自動的にIndexController.phpのindexActionが呼び出されるようになっています。

このアプリケーションではindexActionには特にすることがないのでlistActionに処理を渡すことにしています。そのために

$this->_forword('List');

を実行してlistActionに処理を渡しています。結果として,ユーザは

  • http://localhost/list/
  • http://localhost/list/list/

とアクセスしても同じ結果になります。indexActionに特定の機能を持たせたくない場合や,将来別の機能を持たせるかもしれない場合に_forward()は便利です。

次にビュースクリプトの解説をしますが,デフォルトのビュースクリプト名はアクション名になっています。アクション名に意味のある名前を持たせるとビュースクリプトのファイル名も分かりやすくなります。

listアクションでは

                $sql = "SELECT * FROM guestbook ORDER BY id DESC";
                $rows = $this->db->fetchAll($sql);

                $this->view->rows = $rows;

で,SQL文を実行してすべてのレコードを取り出し,コントローラがあらかじめ用意してくれているviewオブジェクトのプロパティとして保存しています。

この状態で一度このコントローラにアクセスしてみましょう。

ビュースクリプトが無い場合のエラー

Message: script 'list/list.phtml' not found in path (../application/views/scripts/)

と,ビュースクリプトがないため,エラーになっていることが分かります。

ビュースクリプトの名前から分かるように,Zend Frameworkのビューは通常のPHPスクリプトとして処理されます。つまり,if,while,echo などのPHPの制御文や関数が通常通り使えることを意味します。

ビュースクリプトを作る

早速ビュースクリプトを作ってみましょう。ビュースクリプトは

  • /www/guestbook/application/views/scripts

ディレクトリに中に,コントローラ名のディレクトリを作成し,その中に保存します。デフォルトのビュースクリプト名はアクション名と同じです。拡張子はphtmlです。

Listkコントローラのlistアクションのビュースクリプトの場所と名前は次のようになります。

  • /www/guestbook/application/views/scripts/list/list.phtml

著者プロフィール

大垣靖男(おおがきやすお)

University of Denver卒。同校にてコンピュータサイエンスとビジネスを学ぶ。株式会社シーエーシーを経て,エレクトロニック・サービス・イニシアチブ有限会社を設立。
オープンソース製品は比較的古くから利用し,Linuxは0.9xのころから利用している。オープンソースシステム開発への参加はエレクトロニック・サービス・イニシアチブ設立後から。PHPプロジェクトでは,PostgreSQLモジュールのメンテナンスを担当している。

URLhttp://blog.ohgaki.net/

著書