はじめに
本連載では、PHP上で動作するアプリケーションフレームワークであるsymfonyでアプリケーション開発を行う方法について紹介します。前回はsymfonyによる掲示板アプリケーションの作成を通し、主にscaffolding機能をはじめとしたデータベースとの連携などの方法について紹介しました。掲示板作成の後半となる今回は、掲示板の基本機能の実装や管理者用画面の作成などを通し、ページャー機能やカスタムヘルパーの作成、入力値検証の方法、認証関連の機能、アドミンジェネレーターを紹介していきます。
過去の記事
対象読者
PHPの基本構文は一通り理解しているが、フレームワークを利用したことはないという方を対象としています。
必要な環境
symfonyは、PHP5とWebサーバがインストールされている環境で利用可能です。本稿ではWebサーバとしてApache2.2を、OSにWindows XPを採用し、アプリケーションを作成していきます。また、データベースとしてMySQLを用いています。以下に、今回アプリケーション作成/動作確認に用いた環境を示します(インストールにあたっては最新安定版の使用を推奨します)。各項目の詳細なインストール手順は、『サーバサイド技術の学び舎 - WINGS』より「サーバサイド環境構築設定手順」を参照してください。
- Windows XP SP2
- PHP 5.2
- PEAR
- Apache 2.2.3
- MySQL 5.0.24a
LinuxやFreeBSDなどUNIX系OSを使用している方も、コマンドはほぼ一緒ですので、パスなどは適宜読み替えてください。
基本機能の実装(続)
前回までで返信機能を実装しましたが、今回はさらに削除、ページャー、検索の各機能を実装していきます。
削除機能
書き込みの削除機能を実装します。仕組みとしては、入力されたパスワードが一致した場合に、レコード上のTITLE
フィールドを「DELETED
」で上書きします(タイムスタンプは削除された時刻に再設定されます)。TITLE
フィールドがDELETED
のものはリスト画面上に内容を表示しないようにします。レコードそのものを消去するわけではないので、もともとあるdeleteアクションとは別にアクションを作成します。今回はsakujoアクションとします。
削除フォーム追加と表示制限:listSuccess.php編集
リスト画面で、削除用パスワード入力フォームと削除ボタンを追加します。$sakujo_key
でパスワードをsakujoアクションに送っています。
<?php echo form_tag('bbsdata/sakujo') ?> <?php echo input_password_tag('sakujo_key', '') ?> <?php echo input_hidden_tag('id', $bbsdata->getId()) ?> <?php echo submit_tag('Delete') ?> </form>
そして個別レコード表示を、TITLE
フィールドがDELETED
でないものに限ります。
<td> <big><?php echo $bbsdata->getTitle() ?></big> </td> <?php if ($bbsdata->getTitle() != "DELETED"): ?> <td> <?php echo mail_to($bbsdata->getMail(), $bbsdata->getAuthor()) ?> </td> <td> <small>[<?php echo $bbsdata->getCreatedAt() ?>]</small> </td> <td> <?php echo link_to('Url', $bbsdata->getUrl()) ?> </td> <?php endif ?>
exucuteSakujo()作成
executeSakujoアクションを新たに「actions.class.php」内に追記します。TITLE
フィールドがDELETED
に上書きされます。
public function executeSakujo () { $bbsdata = BbsdataPeer::retrieveByPk($this->getRequestParameter('id')); if($this->getRequestParameter('sakujo_key') == $bbsdata->getPasswd()){ $this->forward404Unless($bbsdata); $bbsdata->setTitle('DELETED'); $bbsdata->save(); }else{ return sfView::ERROR; } return $this->redirect('bbsdata/list'); }
「<モデルクラス名>Peer::retrieveByPk(<ID>)
」で、特定のIDを持つレコードにアクセスできます。また「$this->forward404Unless($bbsdata)
」は、対象となるレコードが存在しなかった時に404ページを表示させるためのメソッドです。
sakujoError.php作成
パスワードが間違っていた時のためのエラービューを作成します。前回説明した通り、アクションが無事終了しなかった場合はエラービューが呼び出され、その名前は「<アクション名>Error.php」となります。
<h2>パスワードが違うため削除できません。</h2> <hr /> <?php echo link_to('一覧表示へ', 'bbsdata/list') ?>