SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

symfony入門

symfony入門(3):掲示板アプリケーション作成でsymfonyを理解しよう(後篇)

symfonyによる実践的なPHPアプリケーション開発


  • X ポスト
  • このエントリーをはてなブックマークに追加

掲示板アプリケーション作成の後編では、「削除機能」「ページャー機能」「検索機能」を実装し、ソースのリファクタリングを行った後、「管理者ログイン画面」を作成します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 本連載では、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アクションに送っています。

listSuccess.php(追加分)
<?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でないものに限ります。

listSuccess.php(抜粋)
<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に上書きされます。

actions.class.php(追記分)
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」となります。

sakujoError.php
<h2>パスワードが違うため削除できません。</h2>
<hr />
 <?php echo link_to('一覧表示へ', 'bbsdata/list') ?>

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
ページャー機能

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
symfony入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 川北 季(カワキタ ミノル)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/911 2007/03/09 10:08

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング