ホーム > CakePHP > CakePHPで簡単掲示板を作ってみる

CakePHPで簡単掲示板を作ってみる

雑誌『WEB+DB PRESS vol.50 2009』の記事を参考に、昨日Ubuntu ServerでセットアップしたCakePHPで簡単掲示板チュートリアルをやってみる。

データベースへの設定と作成

先にMySQLで使用するデータベースを作成しておき、cakeのデータベース設定ファイルの内容を書き換える。

cake/app/config/database.php

class DATABASE_CONFIG {

    var $default = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'user',
        'password' => 'password',
        'database' => 'database_name',
        'prefix' => '',
    );

‘login’
‘password’
‘database’

の部分を適宜書き換える。

以下の内容でarticlesテーブルとそのカラムを作成。テーブル名はcakePHPのルールで複数形。これを守ることで、テーブルとモデルの関連づけが自動で行われる。

mysql> CREATE TABLE articles (
    -> id INTEGER NOT NULL AUTO_INCREMENT,
    -> name VARCHAR(255),
    -> message TEXT,
    -> PRIMARY KEY (id)
    -> );

Scaffoldで管理画面を作る

アプリケーションの土台となるCRUDを作成してくれる機能「Scaffold」を利用する。

今回作る掲示板アプリケーションの管理画面をこの「Scaffold」機能で作成し、データ操作が行えるようにする。

cake/app/controllers/ディレクトリに
admin_controller.phpを作成。
内容は以下のように記述。

admin_controller.php


ブラウザでhttp://IPアドレス/cake/adminにアクセスすると以下のような画面が表示される。

 Article_1250388574116

「New Article」というリンク文字列をクリックするとデータの登録が行える。試しにnameとmessageを入力してみる。

 Article_1250388702101

Articleのデータが1つ追加された。この内容は右側のView, Edit, Deleteで確認、編集、削除が出来る。

認証画面の作成

この管理画面にBasic認証をかけてみる。(CakePHPには複雑な認証機構を実装できるAuthコンポーネントというのがあるらしいけれど、今回は使わない)

先ほどscaffoldの記述をしたadmin_controller.phpに以下のように記述を追加するだけでいい。


コントローラの作成

記事(article)を一覧表示するためのarticlesコントローラを作成する。

ブラウザでhttp://IPアドレス/cake/articles/indexにアクセスすると、ブラウザ上で具体的にコントローラの作成を指示される。

 Missing Controller_1250389906452

この指示に従ってcake/app/controllers/articles_controller.phpという名前で以下の内容のファイルを作成する。

articles_controller.php


ブラウザをリロードすると今度は次の指示が出る。今作成したarticles_controller.phpに太字の部分を追加しろと。これに、もう一行、データベースから記事の一覧を取得する記述も追加してみる。

set('articles', $this->Article->find('all'));
    }
}

ビューの作成

再度ブラウザをリロードすると、今度はビューファイルを作成するように言われる。ビューファイルはSmartyのようなテンプレートエンジンの役割をするファイルで、構文はPHPそのまま。

さっきarticles_controller.phpに追記したindexアクションでデータベースから記事の一覧を取得しているので、これを表示するビューファイル(見た目のテンプレート)を作成する。

cake/app/views/コントローラ名(小文字)/メソッド名.ctp

として作成することで、コントローラに対応するビューファイルを自動的に表示することが出来る。

ブラウザでErrorとして表示されている「/var/www/cake/app/views/articles/index.ctp」のように、viewsディレクトリにarticlesディレクトリを作成し、その中にindex.ctpという名前で作成すれば良い。内容は以下のようにしてみる。

/var/www/cake/app/views/articles/index.ctp

";
        echo $article['Article']['name'];
        echo "";
        echo $article['Article']['message'];
        echo "

"; }

ブラウザをリロードすると、投稿記事の一覧が表示される。

 Articles_1250392338219

投稿処理の作成
記事の一覧表示はできるようになったのおで、次は投稿画面を作成する。

作成済みのapp/views/articles/index.ctpの中に以下のように記述を追加して、ページ下部に投稿フォーム部分が表示されるようにしてみる。

";
        echo $article['Article']['name'];
        echo "";
        echo $article['Article']['message'];
        echo "

"; } // 投稿フォーム echo $form->create(); echo $form->input('name'); echo $form->input('message'); echo $form->submit(); echo $form->end();

リロードすると投稿フォームが追加された。

 Articles_1250394672441

実際に投稿してみると、エラーが出る。これも親切に、ブラウザ上で詳しい指示が出ている。

 Missing Method in Controller_1250393657135

cake/app/controllers/articles_controller.php内に「addメソッド」がないよと。

指示されたファイルに以下のようにaddメソッドを追加する。

articles_controller.php

set('articles', $this->Article->find('all'));
    }

    // addメソッド
    function add() {
        if ($this->data) {
            $this->Article->save($this->data);
        }
        $this->redirect('/articles/index');
    }
}

このaddメソッドの内容は、if文でデータが送信されたかを判定し、データがあればArticleとして保存をし、その後で投稿記事一覧ページへリダイレクトするとなっている。

これで再度記事を送信してみると、エラーもなく無事に記事の追加が確認出来た。

モデルについて

この例ではコントローラの中で$this->Article->save()や$this->Article->finde()を使ったけれど、こうしたDB処理をはじめとしたロジックを担当している$this->Articleクラスを「モデル」と言う。

今回はモデルには手を加えずにコードを書いたけれど、実際にはapp/modelsの下にarticle.phpという名前でモデルクラスを用意することで$this->Articleが拡張できるようになっていて、そこにロジックを記述していく。

複数のメソッドで利用するような処理はモデルクラスに実装しておいて各メソッドから利用することで、似たようなロジックが点在することを防げる。コントローラにはなるべくロジックを書かないようにしたほうが良い。

デザインの仕組み

CakePHPでは、default.ctpというベースとなるデフォルトのデザインテンプレートがあり、これの上に、各ビューに対応したテンプレートをのせる形になっている。

これによって、ヘッダやフッタといった共通部分はdefault.ctpにまとめておくことが容易である。(内部のコンテンツだけをそれぞれのビューファイルで制御)

同色が背景にしかれているヘッダ部とフッタ部がそのdefault.ctpで制御されている部分。

 Articles_1250394672441

以上で、簡単掲示板チュートリアル、とりあえずおしまい。

コメント:0

コメントフォーム
入力した情報を記憶する

トラックバック:0

この記事のトラックバック URL
http://showzine.info/blog/2009/08/cakephp%e3%81%a7%e7%b0%a1%e5%8d%98%e6%8e%b2%e7%a4%ba%e6%9d%bf%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b.html/trackback
トラックバックの送信元リスト
CakePHPで簡単掲示板を作ってみる - SHOWJIN*BLOG より

ホーム > CakePHP > CakePHPで簡単掲示板を作ってみる

検索
フィード

ページの上部に戻る