- 2008年2月 8日 18:58
- CakePHP
最近、中規模のサイトをPHPで作る機会が多くなりコードの品質を一定に保つことが難しくなってきました。一人であれば、品質を保つことは可能なのですが、実際に運用をしていく段階で、別の人間にプロジェクトを引き継いだり、スポットで手伝ってもらったりすると、もう駄目です。
今までは、社内独自ライブラリやら独自テンプレートエンジンやらを使っていましたが、それもPHP5に移行するにあたって問題点が浮上したり、その使い方を学習するコストがあまりにも無駄。ということで、本格的にフレームワークを業務で使うことを検討してみました。
まずは、フワームワークを実際に使ってみてどんなものか感じるために、掲示板を作ってみました。
CakePHPの基本
CakePHPはMVCというソフトウェアデザインパターンで構成されています。
- M - モデル
- V - ビュー
- C - コントローラ
この3つの頭文字を取ってMVC(Model View Controller)です。CakePHPのマニュアルによると、それぞれの意味付けは
- モデル
- モデルは特定のデータベースのテーブル/レコード、また他のテーブルやレコードとの関連を表します。モデルはさらに、データのバリデーション(検証)規則も含んでいて、モデルデータが挿入されるか更新される際に用いられます。
- ビュー
- ビューは Cake のビューファイルのことで、PHP コードが書き込まれた通常の HTML ファイルです。
- コントローラ
- コントローラは、サーバからのリクエストを処理します。コントローラは、ユーザの入力(URL と POSTデータ)を受け付け、仕事のロジックを適用し、モデルを使用してデータベースのデータを読み書きし、最後に、出力データを適切なビューファイルに送信します。 となっています。
つまり、モデルはデータベース、ビューは表示、コントローラはリクエスト処理ということになります。
CakePHPの命名規則について
ファイル名
ファイル名はアンダースコアでつなげた形を使いします。例えば、articleAdd というクラスを作った場合は、そのファイル名は article_add.php です。これはクラス名以外にもモデル/コントローラなど全てに通じてます。
モデル名
モデルクラス名は英語の単数形です。また、最初の一字は大文字で、複数の単語がつながる場合は各単語の最初の一字を大文字にします(例:ArticleIItem)。
コントーラ名
コントーラのクラス名は英語の複数形です。モデル名と同じように最初の一字+各単語の最初の一字を大文字にします。メンバ関数を外部から見られたくない場合は、頭にアンダーバーを追加してください。
ビュー名
ビューのファイル名は、アクション名を小文字にし、各単語をアンダーバーでつなげたものになります。
データベースのテーブル名
データベースのテーブル名は英字の複数形です。これは、単純に単語の末尾に「s」を付けるのではなく、英単語として正しい複数形にする必要があります(例:entry→entries)。
プライマリキー
プライマリキーの名前は「id」です。アソシエーションする場合は、外部キーはテーブル名(単数形)_idとします。
例えば、articles と users というテーブルがあり、articles に user_id という外部キーを作成します。articles.user_id = users_id という条件のとき、 $this->article->findAll() とすると users テーブルのデータも一緒に取得することが出来ます。
追加タイムスタンプ/更新タイムスタンプ
CakePHPでは、追加タイムスタンプを「created」、更新タイムスタンプを「modified」にするとデータを追加更新する際に自動的に更新してくれます。
ただし、DBや環境によっては modified が自動更新されないこともあるみたいです。僕の環境では自動更新をしてくれなかったので、以下の方法で無理矢理更新させるようにしました。
$article['Article']['modified'] = null;
その他、細かい規約についてはCakePHPのドキュメントを参照してください。
CakePHPをインストールする
CakePHPはPHP4.3.2以降がインストールされており、データベース(MySQL/PostgreSQL/ADODB)が使えるサーバなら大抵使えると思います。.htaccess などで mod_rewrite が使えればベストです。
まず、CakePHPの公式サイトにアクセスしCakePHPをダウンロードします。
2008年2月8日現在では、安定板として1.1.19.6305がリリースされています。ベータ版の1.2.0を使うことも出来ますが、今回は1.1.19を使うことにしました(1.2.0では結構な機能追加が行われているので魅力的ではありますけど)。
ダウンロードして解凍すると「/app」「/cake」「/vendors」の3つのディレクトリが出てきます。それを設置し、.htaccessなどで公開用ディレクトリの設定をします。
DocumentRoot /home/user/html/app/webroot
この設定をしなくても使用することが出来ますが、/app や /vendors などのディレクトリにもアクセスできてしまうため、なるべく設定した方が良いと思います。
この設定をすると、アクセスする際のURIは以下のような物になります。
http://www.example.com/コントローラ名/アクション名/パラメータ1/パラメータ2...
また、 /app/tmp はキャッシュファイルなどを書き込む際に必要なのでパーミッションを変更してください。その他、細かいインストール方法もあるので、CakePHPのセットアップを参照してください。
データベースの設定
app/config/database.php を開いてデータベースの設定を記述します。以下の例はPostgreSQLの場合です。
<?php
class DATABASE_CONFIG {
var $default = array(
'driver' => 'postgres',
'connect' => 'pg_connect',
'host' => 'localhost',
'login' => 'ログイン名',
'password' => 'パスワード',
'database' => 'データベース名',
'prefix' => '',
'encoding' => 'utf8',
);
}
MySQLの場合は
'driver' => 'mysql', 'connect' => 'mysql_connect',
とするだけです。
これで、基本的な設定は全て完了しました。次は掲示板を実際に作ってみます(続きます)。
- Newer: CakePHPで掲示板を作ってみる#2
- Older: 1984sを作ってみました。
Comments:0
Trackbacks:0
- TrackBack URL for this entry
- http://blog.tofu-kun.org/mt-tb.cgi/376
- Listed below are links to weblogs that reference
- CakePHPで掲示板を作ってみる#1 from Webプログラマー+WebデザイナーなZARU日記
