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

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

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

guestbook/index.php

<?php
include 'list/index.php';

このファイルはゲストブックの一覧を表示するスクリプトを呼び出しすだけのスクリプトです。

guestbook/list/index.php

<?php
// ゲストブックデータベースを開く
$db = new PDO('pgsql:host=localhost dbname=guestbook user=postgres password=postgresql');
// すべてのエントリを取得
$stmt = $db->prepare('SELECT * FROM guestbook ORDER BY id DESC');
$stmt->execute();
$rows = $stmt->fetchAll();
// データベースオブジェクトを削除
$db = null;

?>
<html>
<head>
<title>ゲストブック - 一覧</title>
</head>
<body>
<p><a href="../post/">ゲストブックに記入する</a></p>
<?php if (empty($rows)): ?>
<p>ゲストブックが空です。</p>
<?php else: ?>
<table>
     <?php foreach ($rows as $row): ?>
     <tr><td>
    日時: <?php echo htmlentities($row['date_created']) ?><br />
     件名:<?php echo htmlentities($row['title']) ?> <br />
     メッセージ: <?php echo htmlentities($row['content']) ?><br />
     </td>
     </tr>
     <?php endforeach; ?>
</table>
<?php endif; ?>
</body>
</html>

このファイルはシンプルなPHPアプリケーションによくある,一つのファイルですべての処理を済ませるスクリプトです。データベースを開き,中身をすべて読み込み,全部一度に出力しています。

guestbook/post/index.php

<?php
try
{
    // ゲストブックデータベースを開く
    $db = new PDO('pgsql:host=localhost dbname=guestbook user=postgres password=postgresql');

    empty($_POST) ? define('POST',false) : define('POST', true);

    // フォームが送信されている
    if (POST) {
        // データベースに保存
        $db->query("INSERT INTO guestbook (title, content, date_created) VALUES (".$db->quote($_POST['title']).", ".$db->quote($_POST['content']).", ".$db->quote(date('Y-m-d H:i:s')).")");
    }
} catch (PDOException $e) {
    // データベースにアクセスできない
    die('DBサーバへアクセス可能か確認してください');
}


?>
<?php if (!POST): ?>
<html>
<head>
<title>ゲストブック - 書き込み</title>
</head>
<body>
<div>
<form id="guestbook" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<div>
件名: <input type="text" name="title" id="title" /><br />
</div>
<div>
メッセージ:<textarea name="content" id="content"></textarea><br />
</div>
<div>
<input type="submit" name="送信" id="submit_btn" />
</body>
</html>
<?php else: ?>
<html>
<head>
<title>ゲストブック - 書き込み</title>
</head>
<body>
<div><p><a href="../list/">一覧に戻る</a></p></div>
<div>
件名: <?php echo htmlentities($_POST['title']) ?><br />
</div>
<div>
メッセージ:<?php echo htmlentities($_POST['content']) ?><br />
</div>
</body>
</html>
<?php endif; ?>

このスクリプトはデータベースを開き,送信された情報を書き込むスクリプトです。

このアプリケーションを見て「これは酷いアプリだ」とすぐ気がつく方は経験を積んだプログラマだと思います。⁠酷いアプリだ」と気がつかなかった方,大丈夫です。どこがダメなのか解説しながらアプリを改善していきます。

その前に,このアプリケーションをZend Frameworkを利用した書き直してみましょう。

Zend Framework版のゲストブックアプリ

通常版アプリケーションをできる限りそのままに,Zend Framework版のゲストブックアプリケーションを作ってみましょう。言い換えれば,Zend Frameworkアプリケーションらしくないアプリですが,Zend Frameworkを使ったアプリ書き直してみましょう,ということです。

Zend Frameworkアプリケーションと通常のアプリケーションは共存できるので,同じアプリケーションディレクトリの中に作ることにします。

Zend Toolのzfコマンドによって,Zend Framework本体や公開用のディレクトリ,Zend Frameworkアプリケーションを保存するディレクトリが作成されていると思います。本当はいろいろ解説すべき部分があるのですが,とにかくゲストブックアプリを作ってみましょう。

必要なファイルは,コントローラスクリプト,ビュースクリプトの2種類,7つのファイルです。以下の図は追加か修正が必要なスクリプトのみを記載しています。

画像

著者プロフィール

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

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

URLhttp://blog.ohgaki.net/

著書