2010年3月28日日曜日

[PHP]とりあえず、CakePHPを使ってみる

CakePHPを使ってそれなりのものが作れるようになったので、CakePHPの基本的なことをまとめてみます。CakePHPのマニュアル(The Cookbook)を読んでいるというを前提に、ある程度スキルがある人向けな内容かもしれません。

インストール

マニュアル通りの手順でいけるはずです。強いていえば、apacheのディレクトリの設定で「AllowOverride All」にするのを忘れないことです。あと、app/webrootをドキュメントルートにせずにどこかのフォルダにマップして使いたいと思うかもしれませんが、できなくはないですが少々面倒なことになると思います。

Eclipse PDTで開発

最初はあまり凝ったことを考えずに、まず適当なフォルダにワークスペースを作って、そのなかにCakePHPに含まれているフォルダ(app,cake,venders)と同じ名前のPHPプロジェクトを作って、そのなかにそれぞれをインポートします。appプロジェクトにあるwebrootのディレクトリをドキュメントルートに設定されたバーチャルホストを作成すればよいでしょう。
なお、配布されているアーカイブの直下にあるファイルは見る必要はあるかもしれませんが、開発には必要ではありません。

開発を始める前に

ここで、開発に取りかかりたいところですが、まずはマニュアルの規約のところを読んだほうがよいです。CakePHPですばやく開発できるカラクリには、命名規約が大きく関わっているからです。

CakePHPのMVC

マニュアルのどこかにMVCの概念を使っていると記述されていたと思いますが、ターゲットとなるアプリケーションはデータベースを利用するWebアプリとなるはずなので、MVCのそれぞれは以下のようなものになると思います。一応説明しますが、軽く流してもらってよいです。

モデル
CakePHPのモデルは、テーブルにあるレコードにアクセスするためのクラスを意味します。もし、テーブルの仕様が規約にそっているならば、$nameがあれば十分ですが、カラムのルールとリレーションの定義もします。ルールは「Data Validation」の項、リレーションは「モデルを結びつける」の項を参照すればよいでしょう。
ビュー
ビューは、出力される形式(通常はHTML)を出力するPHPコード(拡張子ctp)を意味します。このコードではHTML全体を出力するのではなく、bodyに含まれる一部を出力します。外側はレイアウトで定義します。
コントローラ
コントローラは、ウェブサーバから来たリクエストを受け取って処理するところになります。基本的にはモデルからデータを取り出してビューに渡したり、フォームで入力されたデータをモデルを使って書き込むといった流れになります。

それぞれの関係について

あとは、規約にそってファイルを作成し、クラス定義もしくはコードを書いていくわけですが、それぞれの関係がわかってないとうまく動きません。それらを簡単に説明します。

コントローラとモデルの関係
モデルに対応するコントローラのオブジェクトには、モデルのオブジェクトが存在します($this-><モデル名>;)もしリレーションを定義しているのであれば、そのオブジェクトの中に関連付けされたモデルが存在します($this-><モデル名>-><関連しているモデル名>;)。それらのモデルのオブジェクトを使ってデータ(テーブルにあるレコード)を操作します。
コントローラとビューの関係
コントローラに定義するメソッドとビューのファイル名は規約により結びついていて、コントローラからビューにデータを渡すには、$this->set();を使って変数に設定してビューで参照ます。
ビューとモデルの関係
モデルでValidationを定義して、ビューでフォームヘルパー($form)を使って$form->input();で入力させるHTMLフォームを定義すると、ルールに合わないデータが入力されるとエラーが表示されるようになります。
リクエストとコントローラの関係
CakePHPでは、Webサーバ上でのリクエストは「/<コントロール名>[/<アクション名>[/<パラメタ>]]」となります。コントロール名はコントローラのファイル、クラス名に対応し、アクション名は、コントローラのメソッド名、ビューのファイル名に対応します。また、デフォルトのアクション名はindexです。
また、フォームで入力されたデータは$this->dataに格納されます。
コントローラとレイアウトの関係
コントローラの中で$this->layout変数かsetLayout();にレイアウト名を設定するとそれに対応するレイアウトのファイルが利用されます。
ビューとレイアウトの関係
レイアウトの中にレイアウト用に使われる変数($content_for_layoutなど)を出力するように定義します。ビューの出力などはそららの変数に入っています。詳しくはマニュアルを参照してください。

基本的な手順

開発の手順としては、まずテーブルを定義してモデルを作成します。既存テーブルを利用する場合には、モデルでカラムの定義が必要になるかもしれません。ただし、idとなるPRIMARYKEYがないとCakePHPでは操作できないようです。
あとは、操作しようとするモデルのコントローラとアクションとなるコントローラのメソッドとビューを作成します。まずはデフォルトのindex();メソッドとindex.ctpを作成するでしょう。
レイアウトは、必要最小限のものを/app/views/layouts/defualt.ctpに書いておいたほうがいいかもしれません。このとき、$html->css();で外部ファイルを読み込む場合には、webrootのcssフォルダを参照します。

0 件のコメント: