[CakePHP] 構造2

タグ :

CakePHPの基礎をまとめてみるシリーズです。
今回はCakePHPの基本構造のちょいとした拡張機能についてです。

CakePHPの構造

ご存知だと思いますがCakePHPには、コントローラ、モデル。ビューのクラスがあります。
これがMVC構造というものですが、開発をより早くするため、幾つかの追加クラスとオブジェクトが存在します。

  • コンポーネント
  • ヘルパー/エレメント
  • ビヘイビア

これらは拡張性と再利用性を実現するクラスで、アプリケーションのMVC基礎クラスに素早く機能を追加できるように構成されたものです。

[コントローラの拡張(コンポーネント)]

コンポーネントは、コントローラのロジック内で手伝いをするクラスのことです。
もし、複数のコントローラで共通に使いたいロジックがあれば、通常、コンポーネントにするのが一番良い方法となります。

例えば、コアに含まれるEmailComponentクラスは、Emailを簡単に作成、送信することができます。
一つのコントローラの中にこのロジックを書いてしまうのではなく、ロジックをパッケージ化して、共通に使えるようにできるというわけです。

コントローラには、幾つかのコールバックもあります。
CakePHPコアの動作中に自分のロジックを割り込ませたい場合、コールバックを使う事ができます。
使用出来るコールバックには次のものがあります。

  • beforeFilter()
     - 全てのコントローラのアクションロジックの実行前に呼ばれる
  • beforeRender()
     - コントローラロジックの実行後、ビューの表示前に実行される
  • afterFilter()
     - 全てのコントローラロジックを実行し、ビューの表示後に実行される

使いこなせれば非常に便利でキレイなソースコードになると思います。

[ビューの拡張(ヘルパー/エレメント)]

ヘルパーは、ビューのロジックを手伝うクラスのことです。

コンポーネントがコントローラ内で使用されるのと同じように、ヘルパーによって複数のビューから共通の表現用ロジックにアクセスできるようにします。
コアに含まれるヘルパーの一つであるAjaxHelperを使うと、ビュー内でのAjaxリクエストを簡単に扱えるようになります。

たいていのアプリケーションには、繰り返し利用されるビューのコードがあります。
CakePHPはレイアウトとエレメントによってビューコードの再利用を促進します。
デフォルトでは、コントローラによって表示される全てのビューは、レイアウトの中に配置して表示されます。
エレメントは、切れ端を作って複数のビューの中で繰り返し利用したいときに使用できます。

[モデルの拡張(ビヘイビア)]

ビヘイビアはモデル間で共通の機能を追加する方法として利用できます。

例えば、ユーザーデータをツリー構造で保存する場合、User modelをツリーのように動作させるように指定し、ツリー構造の中でのノードの削除、追加、移動などの機能を使う事ができます。

モデルは、データソースと呼ばれるもう一つのクラスによっても構成されています。
データソースは、異なるタイプの一連のデータについて、モデルがそれを操作出来るように抽象化するものです。
CakePHPのアプリケーションの主なソースは、通常データベースですが、RSSフィード、CVSファイル、LDAPエントリ、iCalイベントなどをモデルが扱えるようなデータソースを追加する事もできます。

データソースは、異なるソースからのレコードを関連づけることも可能です。つまり、SQLのJoinだけに制限されているわけではなく、LDAPモデルに多くのiCalイベントを関連付けるようなこともできます。

コントローラと同じように、モデルにもコールバックがあります。

  • beforeFind()
  • afterFind()
  • beforeValidate()
  • beforeSave()
  • afterSave()
  • beforeDelete()
  • afterDelete()

名前を見れば何をするものか分かると思いますので省略します。
これらもコントローラと同様に非常に便利だと思います。

Share

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

Comment

コメントを残す

*がついている欄は必須項目です。

  • Twitter
  • Facebook
  • Google Plus
  • RSS Feed