CakePHPの規約
私たちは「設定より規約」(convention over configuration)という考え方に賛成です。CakePHPの規約を習得するには少し時間がかかりますが、長い目で見ると時間を節約していることになります。規約に従うと自由に使える機能が増えますし、設定ファイルを調べまわってメンテナンスするという悪夢からも自由になります。規約によって開発が統一感を持つため、開発者が加わって、すぐにヘルプするということがやりやすくなります。
CakePHPの規約は長年のweb開発経験とベストプラクティスを精錬したものです。CakePHPでの開発にはこれらの規約の利用をお勧めしますが、特に既存システムと作業しなければいけない場合などのために、条項の大部分は独自設定できる、という点も述べておきましょう。
ファイルとクラス名の規約
通常、ファイル名はアンダースコア記法(underscored)を使い、クラス名にはキャメル記法(CamelCased)を使います。例えば、KissesAndHugsControllerクラスは、kisses_and_hugs_controller.phpというファイルの中にあります。
しかし、ファイル名が必ずクラス名に対応しているというわけではありません。EmailComponentクラスは、email.phpというファイルの中にありますし、HtmlHelperは、html.phpの中にあります。
モデルの規約
モデルのクラス名は単数形でキャメル記法です。Person、BigPerson、ReallyBigPersonなどは規約に合ったモデル名です。
CakePHPのモデルに対応するテーブル名は、複数形でアンダースコア記法です。上記の例で言えば、テーブル名はそれぞれ、people、big_people、really_big_peopleになります。
モデル間のhasAndBelongsToManyの関係で使用されるJoinテーブルは、Joinするテーブルに合わせて、アルファベット順に(zebras_applesではなく、apples_zebras)並べた名前にしてください。もし、アプリケーションの機能として、TagモデルとPostモデルの間にこの関係があるのなら、テーブル名は、posts_tagsになります。
コントローラの規約
コントローラのクラス名は複数形でキャメル記法です。最後に‘Controller’が付きます。PeopleController、BigPeopleController、ReallyBigPeopleControllerなどは規約に合ったコントローラ名です。
コントローラに最初に書く関数は、おそらくindex()関数でしょう。リクエストによってコントローラは指定されたがアクションは指定されなかったという場合、CakePHPのデフォルト動作では、そのコントローラのindex()関数を表示することになっています。例えば、http://www.example.com/apples/はApplesControllerのindex()関数を呼ぶようにマップされ、http://www.example.com/apples/viewは、ApplesControllerのview()関数にマップされます。
コントローラ関数名の先頭にアンダースコア(_)を付けることで、CakePHPのコントローラ関数を隠蔽することが可能です。アンダースコアが付けられたコントローラ関数はdispatcherを通して、web上では見えないように設定されます。内部での利用のみ可能になります。
ビューの規約
ビューのテンプレートファイルは、それを表示するコントローラの関数に合わせた、アンダースコア記法で名前が付きます。PeopleControllerクラスのgetReady()関数は、ビューテンプレートとして、/app/views/people/get_ready.ctpを探すことになります。
基本パターンは、 /app/views/コントローラ名/アンダースコア記法_関数名.ctpです。
各部分をCakePHPの規約に合わせて命名しておくことで、混乱を招く面倒な設定をしなくても機能的に動作するようになります。最後に、規約に合わせた最終形をまとめておきましょう。
- データベースのテーブル: ‘people’
- モデルクラス: ‘Person’、 場所は /app/models/person.php
- コントローラクラス: ‘PeopleController’、 場所は /app/controllers/people_controller.php
- ビューのテンプレート、場所は /app/views/people/index.ctp
これらの規約により、CakePHPは、http://example.com/people/ へのリクエストを、PeopleControllerのindex()関数にマップします。そして、Personモデルが自動的に使える(データベースの'people'テーブルに自動的に接続される)ようになり、表示されることになります。必要なクラスとファイルを作成しただけでこれらの関係が設定されています。
さて、CakePHPの基本について一通り理解できたので、このマニュアルの最後にある付録である、CakePHPブログチュートリアルを試すのも良いでしょう。

login to add a comment