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

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

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

まずはエラー処理

1.7.xのzfコマンドはエラー処理用に必要なコードとビュースクリプトを用意していません。これでは例外が発生したとき空のページが表示され,何が問題なのかまったく分かりません。

幸い簡単なコード追加でエラーを表示させることができます。簡単なエラー処理を行うにはerrorコントローラクラスにerrorアクションを追加し,errorビューを追加するだけす。

/www/guestbook/application/controllers/ErrorController.phpに次のメソッドを追加し,

    public function errorAction()
    {
    }

このerrorアクション用のビューを作ります。

application/views/scripts/error/error.phtml

<html>
<head><title>Error</title></head>
<body>
<h1>An error occurred</h1>
<h2><?php echo $this->message ?></h2>
<?php if ('development' == $this->env): ?>
<h3>Exception information:</h3>
<p>
 <b>Message:</b> <?php echo $this->exception->getMessage() ?>
</p>
<h3>Stack trace:</h3>
<pre><?php echo $this->exception->getTraceAsString() ?></pre>
<h3>Request Parameters:</h3>
<pre><?php var_dump($this->request->getParams()) ?></pre>
<?php endif ?>
</body>
</html>

このビューを追加すると,エラーが発生した場合になぜエラーになったか分かるようになります。

<?php if ('development' == $this->env): ?>

から,開発環境の時だけ詳細なエラーメッセージが表示されるようになっていることが分かると思います。

これで例外エラーは表示されるようになりますが,通常のPHPエラーは表示されていないかも知れません。本連載で解説したインストール方法のphp.iniでは,display_errors=Offに設定されています。この設定ではエラーは表示されません。運用時にはこれでよいのですが,開発時には困るので,php.iniを修正するか,スクリプト中で設定を変更しなければなりません。PHPエラーが表示されないと,つまらない間違い(関数名のタイプミス等)で時間を浪費してしまうことも多いので,開発環境ではdisplay_errors=On,error_reporting=E_ALLに設定するとよいでしょう。

本連載のインストールでのphp.iniの場所は次の通りです。

  • /opt/PostgreSQL/EnterpriseDB-ApachePhp/php/php.ini

php.iniの場所を知るにはphpinfo関数を実行するとよいでしょう。

画像

エラー処理用のビューを追加すると,存在しないコントローラを呼び出した等の例外が発生した場合にその状況がエラーメッセージと共に表示されるようになります。

画像

この図は,http://localhost/hoge/hoge/ のように,存在しないhogeコントローラのhogeアクションを呼び出そうとした時のエラー画面です。

これで随分,アプリケーションを作ることが楽になります。

ListとPostコントローラ/ビュースクリプトの作成

次にゲストブックアプリケーションの中身であるListとPostのコントローラとビュースクリプトを作ります。

まずはListコントローラから作りましょう。Zend Frameworkの機能についても一つづつ紹介します。

ZendFrameworkはあまり規約を設定に利用していないフレームワークですが,コントローラファイルのファイル名,コントローラクラスの名前,アクションメソッド名は規約通りに付けなければなりません。

コントローラスクリプトはコントローラディレクトリ(この場合,/www/guestbook/application/controllers)に配置しなければなりません。ファイル名は

  • [コントローラ名]Controller.php

でなければなりません。コントローラファイルはコントローラクラスを定義する必要があります。クラス名は

  • [コントローラ名]Controller

でなければなりません。コントローラクラスにはそのコントローラがサポートするアクションをメソッドとして定義しなければなりません。アクションメソッド名は

  • [アクション名]Action

でなければなりません。デフォルトでは

  • http://hostname/[コントローラ名]/[アクション名]/

とリクエストされた場合,[コントローラ名]Controllerクラスの[アクション名]Actionが呼び出されます。

Zend Frameworkのコントローラについてほかにも知るべきことはありますが,今のところはこれだけ知れば十分です。

著者プロフィール

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

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

URLhttp://blog.ohgaki.net/

著書