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

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

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

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

<html>
<head>
<title>ゲストブック - 一覧</title>
</head>
<body>
<p><a href="../post/">ゲストブックに記入する</a></p>
<?php if (empty($this->rows)): ?>
<p>ゲストブックが空です。</p>
<?php else: ?>
<table>
 <?php foreach ($this->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>

$thisとはviewオブジェクトのことです。listコントローラのlistアクションで

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

として代入された$rowsが$this->rowsとして利用できます。

ビューを定義後にアクセスすると次のようなページが表示されます。

ゲストブックの一覧

Postコントローラとビュー

Postコントローラとビューについては,ファイルを簡単に紹介します。

/www/guestbook/application/controllers/PostController.php

<?php
class PostController 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'
        ));
        date_default_timezone_set('Asia/Tokyo');
    }


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

    public function postAction()
    {
        if (!$this->getRequest()->isPost()) {
            $this->_forward('edit');
        } else {
            $date = date('Y-m-d H:i:s');
            $db = $this->db;
            // データを保存する
            $sql = "INSERT INTO guestbook (title, content, date_created) VALUES (".$db->quote($_POST['title']).", ".$db->quote($_POST['content']).", ".$db->quote($date).");";
            $db->query($sql);
        }
    }

    public function editAction()
    {
    }


}

目に付くのはdate_default_timezone_set関数とRquestオブジェクトの利用くらいだと思います。

PHP 5.2から新しくロケール対応機能が追加されたため,タイムゾーンを指定しないで日付関数などを利用するとPHPエラーが発生します。これを防ぐためにdate_default_timezone_set関数を利用してタイムゾーンを日本(Asia/Tokyo)に設定しています。

このコントローラはフォームから送信されたデータを受信するので,RequestオブジェクトのisPostメソッドを利用してフォームがPOSTされているか確認しています。

        if (!$this->getRequest()->isPost()) {
            $this->_forward('edit');
        } else {

フォームが送信されていない場合は,editActionのフォワードして編集用のビューが表示されるようにしています。

フォームがポストされた場合は,Zend_Dbオブジェクトを利用して,送信されたデータをデータベースに保存しています。

/www/guestbook/application/views/scripts/post/edit.phtml

<html>
<head>
<title>ゲストブック - 書き込み</title>
</head>
<body>
<div>
<form id="guestbook" action="<?php echo $this->url() ?>" 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>

edit.phtmlについては,PHPコードをまったく含まないHTMLファイルですので,省略します。

著者プロフィール

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

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

URLhttp://blog.ohgaki.net/

著書