マニュアル
CakePHP 1.1.x のマニュアルへは、こちらをクリックしてください。
CakePHP のドキュメント Cookbook にようこそ。Cookbook は、一般ユーザーでも貢献できる wiki ライクなシステムです。このシステムを公開する事で、高品質で妥当で正確な CakePHP のドキュメントを維持することを望みます。また、Cookbook で、誰でも簡単に貢献できるようになります。
AD7six には非常に 感謝したいと思います。彼は Cookbook の発起人でもあり、多くの時間をかけて、このアプリケーションの開発、テスト、改良にあたっています。
# 使い方:
- サイト上で何かのエラーや、不完全な部分、まったく触れられていない部分、または修正の必要がある部分を見つけたとします。
- Bakeryのログインアカウントで、Cookbook にログインしてください。
- 妥当でセマンティックな HTML を使って、追加/編集したものをレビューのために投稿してください。
- 数日後、変更が承認されたかどうかを確認できます。
- また、Cookbook への投稿のガイドラインに則っているかどうかを再確認してください。
# 翻訳
John David Anderson (docs at cakephp dot org)までEメールを送るか、IRC (#cakephp on freenode as _psychic_)で、参加したい旨を連絡してください。
翻訳者Tips:
- アクセント文字のためにhtml entitiesを使用しないでください。このbookはUTF-8を使っています。
- フレンドリーな文体を使ってください。
- タイトルと内容を同時に翻訳してください。
- 翻訳する言語のページで閲覧・編集してください。そうしないと、英語ページの編集として記録されてしまいます。どの言語の翻訳なのかをレビューアーが知っていることはまれです。
- マークアップを大幅に変更したり、新しい内容を追加したりしないでください。オリジナルの内容の情報に不備があるのであれば、英語の情報をまず編集してください。
- 用語を英語で書く場合には、
<em>タグで囲んでください。例えば、"asdf asdf<em>Controller</em>asdf"や"asdf asdf Kontroller (<em>Controller</em>) asfd"などです。
CakePHPのドキュメント整備のため、出来る限りのことを行っています。Cookbookを活用して、わたしたちの皆が恩恵を受けている、このCakePHPプロジェクトにフィードバックしましょう。
1 CakePHPを使ってみよう
Cakebook へようこそ! Cakebook は、開発がとても容易になるウェブアプリケーションフレームワーク CakePHP のマニュアルです。
このマニュアルは、一般的なオブジェクト指向プログラミング (OOP) の基礎を理解していることを前提としています。フレームワークの中の様々な機能は、「SQL、JavaScript、XML」のような異なった技術を利用しています。このマニュアルでは、これらの技術の利用方法だけを示し、技術については説明しません。
1.1 CakePHPって何?使う理由は?
CakePHPは、フリー、またオープンソースで作成されている、PHPの高速開発 フレームワークです。それは、プログラマーがwebアプリケーションを作る際の基本的な骨組みとなります。私たちの主要な目標は、柔軟性を失うことなく、構造化されたすばやい仕方での開発を可能にすることです。
CakePHPは、web開発から単調な作業を取り除きます。また、本当にするべきコーディング、つまり、アプリケーション固有のロジックに関するコーディングを始めるためのツールがすべて準備されています。新しいプロジェクトを始める時には、毎回、車輪の再開発をする代わりに、CakePHPのコピーをチェックアウトして、アプリケーションの本質部分の開発にすぐに取り掛かれます。
CakePHPにはアクティブな開発チームとコミュニティが存在し、プロジェクトに貢献しています。CakePHPを使用する、ということは、車輪の再開発を避けるだけでなく、あなたが開発するアプリケーションのコア部分がよくテストされ、常に改良されている、ということになります。
CakePHPの使用で益を受ける幾つかの点をざっと挙げると次のようなものがあります:
- アクティブ、フレンドリーなコミュニティ
- フレキシブルなライセンス
- PHPのバージョン4と5に対応
- データベースとのやり取りのための、CRUDが統合済み
- アプリケーションのscaffolding(足場組み)
- コード生成
- MVC アーキテクチャ
- クリーンでカスタマイズ可能なURLsとroutesを用いるリクエストディスパッチャー
- バリデーションを内蔵
- 高速で柔軟性のあるテンプレートシステム(PHP構文、各種ヘルパー)
- AJAX、JavaScript、HTMLフォーム、などなど各種のViewヘルパー
- Eメール、クッキー、セキュリティ、セッション、リクエストハンドリングなどのコンポーネント
- 柔軟なACL
- データのサニタイズ
- 柔軟なキャッシュ
- ローカライゼーション
- どんなwebサイトdirectoryからでも動作。Apacheの設定は最小限のみ
1.2 情報の探し方
# 公式 CakePHP ウェブサイト
公式 CakePHP ウェブサイトは、いつでも見に行く価値のある素敵な場所です。よく使う開発ツール、スクリーンキャスト、寄付の方法、ダウンロードなどへのリンクがあります。
1.2.1 The Cookbook
このマニュアルは、疑問の解決のための最初の場所になるはずです。他のさまざまなオープンソースプロジェクトと同じように、常に新しい仲間が入ってきます。疑問の答えをこの場所で探してみてください。時間がかかるかもしれませんが、貴重な知識を多く身につけることができるでしょう。また、どんなサポートがあるのかについても見えてくるはずです。マニュアルとAPIの両方の情報がオンラインで入手可能です。
# The Bakery
CakePHPのBakeryは、CakePHPに関する情報中継所(clearing house)です。チュートリアル、事例研究、コード例などについて情報が得られます。CakePHPに関する理解が深まったらログインして知識をコミュニティと共有し、名声と富を手に入れましょう。
# The API
直接的な答えがコア開発者から直接得られるので、CakePHP API (Application Programming Interface)は、フレームワークの内部動作に関する詳細に関する、もっとも総合的なドキュメントです。直接的なコードリファレンスなのでプロペラ帽子を準備しましょう。
# CakeForge
CakeForgeは、CakePHPプロジェクトを他の人に公開できる、もう一つの開発者用リソースです。すばらしいコンポーネントやすごいプラグインを探している(または公開したい)のなら、CakeForgeをチェックしてみましょう。
# The Test Cases
API で提供される情報が十分ではないと感じる場合、CakePHP 1.2 で提供されるテストケースのコードをチェックしてください。関数の実践的な例やクラスのメンバーの使用法として使用できます。CakePHP の配布パッケージでは、以下の場所にテストケースが配置されます。
cake/tests/cases
cake/tests/cases
# IRC チャンネル
#cakephp @ irc.freenode.net
途方にくれたら、CakePHP の IRC チャンネルで叫んでみましょう。(注:ただし英語)北アメリカと南アメリカの昼間の時間帯であれば、たいていは開発チームのだれかがそこにいます。助けが必要な場合でも、同じ地域での知り合いが必要でも、最新のスポーツカーを寄付したいという場合でも、喜んで聞いてくれるはずです。
# Google グループ
http://groups.google.com/group/cake-php
CakePHP には、非常にアクティブな Google グループがあります。過去に話し合われた解決策、よくある質問、直近の問題に対する解答などを見つけることのできる、優れたリソースセンターになるでしょう。(注:日本語では、http://cakephp.jpもどうぞ。)
1.3 Model-View-Controller(モデル-ビュー-コントローラ)を理解する
CakePHP は、MVC ソフトウェアデザインパターンにしたがっています。MVC でプログラムすると、アプリケーションは大きく分けて三つに分かれます:
- モデルは、アプリケーションのデータを表します。
- ビューは、モデルデータの表示方法を扱います。
- コントローラは、ユーザによるリクエストを受け取って振り分けます。
図1: 基本的な MVC リクエスト
図1は、CakePHP の基本的な MVC のリクエスト例です。説明のために、例えば、リカルドさんが、広告から入ってきたページの“特注ケーキを今すぐ購入!”というリンクをクリックしたとしましょう。
- リカルドさんのクリックしたリンクは http://www.example.com/cakes/buy につながっていて、ブラウザは web サーバにリクエストを送信します。
- ディスパッチャ(dispatcher)は、リクエストされた URL (/cakes/buy) をチェックし、リクエストを正しいコントローラに手渡します。
- コントローラは、アプリケーション独自のロジックを実行します。例えば、リカルドさんがログインしているかどうかをチェックするなどです。
- また、コントローラはモデルを使用して、アプリケーションのデータにアクセスします。たいていの場合、モデルはデータベースのテーブルを表していますが、LDAP エントリ、RSS フィード、システムのファイルにすることも可能です。この例では、コントローラは、モデルを使ってリカルドさんの最新の購入履歴をデータベースから取得します。
- コントローラがひとたびデータをマジックのように取り出すと、コントローラはそれをビューに送ります。ビューはこのデータを受け取り、ユーザにどのように見せるかを準備します。CakePHP のビューは、たいていの場合は HTML フォーマットになりますが、必要に応じて、ビューは簡単に、PDF、XML フォーマット、JSON オブジェクトなどにすることも可能です。
- ビューがコントローラからのデータを使用し、完全にビューを出力すると、そのビューの内容はリカルドさんのブラウザに返信されます。
アプリケーションに対する、ほぼすべてのリクエストがこの基本的なパターンに従います。後で幾つかの CakePHP 特有の点について説明しますので、それまでこの点を忘れないようにしてください。
1.3.1 利点
なぜMVCを使うのでしょうか。なぜなら、それはアプリケーションを管理しやすく、モジュラー化し、高速開発できるパッケージに変える、実証済みのソフトウェアデザインパターンだからです。アプリケーションの動作をモデル、ビュー、コントローラの三つに分けると、アプリケーションは非常にフットワークがよくなります。新しい機能を簡単に追加でき、既存の機能をさっとリニューアルできます。モジュラー化と分離デザインによって、高速にプロトタイプが作れるようになることなどをはじめとして、開発者とデザイナーが同時に作業できるようになります。この分離スタイルにより、開発者は、他の部分に影響を与えることなく、ある部分に変更を加えることができます。
この方法でアプリケーションを作った経験が無い場合には、慣れるまでにしばらくかかるかもしれません。しかし、あなたがひとたび最初のCakePHPアプリケーションを作れば、もう後戻りはしたくなくなるであろうと、私たちは確信しています。
2 CakePHPの基本原則
CakePHP フレームワークはアプリケーションの強力な基礎部分を提供します。CakePHP はユーザが起こすあらゆる種類のリクエストから、最終的にウェブページをレンダリングするまでの全ての側面をハンドルします。そしてこのフレームワークは MVC の原則に従っているため、アプリケーションを多くの側面で簡単にカスタマイズし拡張することができます。
また、このフレームワークはファイル名やデータベースのテーブル名に関する基本的な組織的構造も提供し、アプリケーション全体を矛盾なく論理的に保ちます。このコンセプトは単純ですが強力です。規約に従うことで、どこに何があるのか、それらがどのように組織化されているのかを、いつも確実に把握できるのです。
2.1 CakePHPの構造
CakePHPには、コントローラ、モデル、ビューのクラスがあります。しかし、MVCでの開発をよりすばやく、楽しめるものにするために、幾つかの追加クラスとオブジェクトがあります。コンポーネント(Componetns)、ビヘイビア(Behaviors)、ヘルパー(Helpers)は、拡張性と再利用性を実現するクラスで、アプリケーションのMVC基礎クラスにすばやく機能を追加できます。今は大枠をつかむだけにして、後で各ツールの詳細を調べましょう。
2.1.1 コントローラの拡張
コンポーネントは、コントローラのロジック内で手伝いをするクラスのことです。もし、複数のコントローラ(またはアプリケーション)で共通に使いたいロジックがあれば、通常、コンポーネントにするのがいちばん良い方法です。例えば、コアに含まれるEmailComponentクラスは、Emailを簡単に作成、送信することができます。一つのコントローラの中にこのロジックを書いてしまうのではなく、ロジックをパッケージ化して、共通に使えるようにできるわけです。
コントローラには、幾つかのコールバック(callbacks)もあります。CakePHPコアの動作中に自分のロジックを割り込ませたい場合、コールバックを使うことができます。使用できるコールバックには次のものがあります:
- beforeFilter()、すべてのコントローラのアクションロジックの実行前に呼ばれます。
- beforeRender()、コントローラロジックの実行後、しかしビューの表示(render)前に実行されます。
- afterFilter()、すべてのコントローラロジックを実行し、ビューの表示(render)が終わった後に実行されます。手動でrender()をコントローラから呼び、その後にロジックを実行しているのでない限り、afterRenderとafterFilterには違いがありません。
2.1.2 ビューの拡張
ヘルパーは、ビューのロジックを手伝うクラスのことです。コンポーネントがコントローラ内で使用されるのと同じように、ヘルパーによって、複数のビューから共通の表現用ロジックにアクセスできるようにします。コアに含まれるヘルパーのひとつ、AjaxHelperを使うと、ビュー内でのAjaxリクエストを非常に簡単に扱えます。
たいていのアプリケーションには、繰り返し利用されるビューのコードがあります。CakePHPはレイアウト(layout)とエレメント(element)によってビューコードの再利用を促進します。デフォルトでは、コントローラによって表示されるすべてのビューは、レイアウトの中に配置して表示されます。エレメントは、切れはし(snippet)を作って複数のビューの中で繰り返し利用したい時に使用できます。
2.1.3 モデルの拡張
同様に、ビヘイビアはモデル間で共通の機能を追加する方法として利用できます。例えば、ユーザデータをツリー構造で保存する場合、User modelをツリーのように動作させるよう指定し、ツリー構造の中でのノードの削除、追加、移動などの機能を使うことができます。
モデルは、データソース(DataSource)と呼ばれるもう一つのクラスによっても支えられています。データソースは、異なるタイプの一連のデータについて、モデルがそれを操作できるように抽象化するものです。CakePHPアプリケーションの主なソースは、通常データベースですが、RSSフィード、CVSファイル、LDAPエントリ、iCalイベントなどをモデルが扱えるようなデータソースを追加することもできます。データソースは、異なるソースからのレコードを関連づけることも可能になっています。つまり、SQLのJoinだけに制限されているわけではなく、LDAPモデルに多くのiCalイベントを関連付けるようなことも可能です。
コントローラと同じように、モデルにもコールバックがあります:
- beforeFind()
- afterFind()
- beforeValidate()
- beforeSave()
- afterSave()
- beforeDelete()
- afterDelete()
これらのメソッドの名前を見れば、何をするものか分かるはずです。モデルの章で詳細について調べてください。
2.1.4 アプリケーションの拡張
コントローラ、ヘルパー、モデルには親クラスがあり、アプリケーション全体に変更を加えることができます。AppController (/app/app_controller.phpの位置に置きます。)、AppHelper (/app/app_helper.phpの位置に置きます。)と、AppModel (/app/app_model.phpの位置に置きます。)は、すべてのコントローラ、ヘルパー、モデルで共有するようなメソッドを置くのに良い場所です。
クラスやファイルではありませんが、routesは、CakePHPにリクエストを送る役割を果たしています。Routeを定義することによって、URLとコントローラのアクションをどのように結びつける(map)かがCakePHPに伝えられます。URL “/controller/action/var1/var2”は、デフォルトの動作では、Controller::action($var1, $var2)にマップされます。しかし、routesを使うとURLをカスタマイズでき、アプリケーション内でどのように解釈するかを設定できます。
アプリケーション内の機能の中には、そっくりそのままパッケージ化してしまうと便利なものもあります。プラグイン(plugin)はモデル、コントローラ、ビューをパッケージ化したもので、ある特定の目的のために複数のアプリケーションで使えるようにしたものです。ユーザ管理システムや簡単なブログシステムなどを、CakePHPのプラグインにできるでしょう。
2.2 CakePHPの典型的なリクエスト
CakePHPの基本的な構成要素について既に考えました。ここからは、基本的なリクエストがあった場合、個々のオブジェクトがそれをどう処理して完結させるのか、ということを調べてみましょう。前からの例として、我らのリカルドさんが、CakePHPアプリケーションの「特注ケーキを今すぐ購入!」というリンクをクリックしたとしましょう。

図2 よくあるCakeリクエスト
黒 = 必要な要素、灰色 = 任意の要素、青 = コールバック
- リカルドさんがリンクをクリックすると、それはhttp://www.example.com/cakes/buyを指しており、ブラウザは、Webサーバにリクエストを送信します。
- Routerが、URLを解析(parse)し、このリクエストのパラメータを取り出します。このリクエストにおいてビジネスロジックに影響するコントローラ、アクション、その他の引数などです。
- routesによって、リクエストされたURLは、コントローラのアクション(コントローラクラスの中にあるメソッド)にマップされます。この場合は、CakesControllerのbuy()メソッドです。コントローラのアクションロジックが実行される前には、コントローラのbeforeFilter()コールバックが呼ばれます。
- コントローラは、アプリケーションのデータを取り出すためにモデルを使用することができます。この例では、リカルドさんの最新の購入履歴をデータベースから取得するため、コントローラがモデルを使用します。この操作で、該当するモデルのコールバック、ビヘイビア、データソースが動作します。モデルは使用しなくてもかまいませんが、CakePHPのすべてのコントローラは、初期状態では少なくともひとつのモデルを使用する設定になっています。
- モデルがデータを取得すると、それはコントローラに送られます。モデルのコールバックが設定されていれば、それが動作します。
- コントローラはコンポーネントを使用して、データをさらに調整したり、その他の操作(セッション操作、認証、Eメールの送信など)を行ったりすることができます。
- コントローラがモデルとコンポーネントを使用してデータを準備し終えると、データは、コントローラのset()メソッドを使用することで、ビューに渡されます。データが送信される前に、コントローラのコールバックがあれば実行されます。ビューのロジックが動作すると、エレメントやヘルパーなどがあれば使用されます。デフォルトでは、ビューは、レイアウト(layout)の内側に表示されます。
- コントローラのその他のコールバック(afterFilterなど)があれば、実行されます。完全に表示されたコードは、リカルドさんのブラウザに表示されることになります。
2.3 CakePHPのファイル構造
CakePHPの初期状態を調べてみましょう。CakePHPが基本的なMVCリクエストの観点からどう動くかについては学びましたが、同様に、ファイルがどう整理されているのかも知る必要があります。
- app
- cake
- docs
- index.php
- vendors
CakePHPをダウンロードすると、四つの主なフォルダをまず目にします。appフォルダは、あなたのマジックが入る場所です。あなたのアプリケーションファイルはここに入ります。cakeフォルダは、開発チームが作成したマジックが入る場所です。このフォルダ内を編集しないようにしましょう。あなたがコアをいじった場合には、私たちはもう助けを差し伸べることができません。docフォルダは主要なreadme、変更log、ライセンス情報などが含まれています。最後に、vendorsフォルダは、あなたが必要とする外部作成のPHPライブラリを置いて、CakePHPアプリケーションで使用できるようにする場所です。
2.3.1 App フォルダ
アプリケーション開発の大部分は、CakePHP の app フォルダ内で行われます。app の内部フォルダについて調べてみましょう。
| config | は、CakePHP が使用する(数個の)設定ファイルが入る場所です。データベース接続の詳細、ブートストラップ、コアの設定ファイルなどがここに入ります。 |
|---|---|
| controllers | には、アプリケーションのコントローラとコンポーネントが含まれます。 |
| locale | には、国際化のための文字ファイルが入っています。 |
| models | には、アプリケーションのモデル、ビヘイビア、データソースがあります。 |
| plugins | には、プラグインパッケージが入っています。 |
| tmp | これは、CakePHP が一時的なデータを保管する場所です。保管される実際のデータは、CakePHP の設定しだいですが、このフォルダは通常、モデルの内容デ ータや、ログの保管に使用されます。時にはセッション情報も入ります。 |
| vendors | 外部(サードパーティ)で作成されたクラスやライブラリは、ここに置いてください。そうすることで、App::import('vendor', 'name') で簡単にアクセス できるようになります。注意して観察している人は、これは重複しているのではないか、と言うかもしれません。ディレクトリ構造のいちばん上にも vendors フォルダがあるからです。この二つのフォルダの違いは、複数のアプリケーションを動作させて、より複雑なシステムセットアップをする場合のことを考える際 に扱いましょう。 |
| views | 表示用のファイルはここに置きます。エレメント、エラーページ、ヘルパー、レイアウト、ビューのファイルなどです。 |
| webroot | 運用時(production)用のセットアップでは、このフォルダがアプリケーションのドキュメントルートになります。CSS スタイルシートや画像、JavaScript を入れるためのフォルダもあります。 |
2.4 CakePHPの規約
私たちは「設定より規約」(convention over configuration)という考え方に賛成です。CakePHPの規約を習得するには少し時間がかかりますが、長い目で見ると時間を節約していることになります。規約に従うと自由に使える機能が増えますし、設定ファイルを調べまわってメンテナンスするという悪夢からも自由になります。規約によって開発が統一感を持つため、開発者が加わって、すぐにヘルプするということがやりやすくなります。
CakePHPの規約は長年のweb開発経験とベストプラクティスを精錬したものです。CakePHPでの開発にはこれらの規約の利用をお勧めしますが、特に既存システムと作業しなければいけない場合などのために、条項の大部分は独自設定できる、という点も述べておきましょう。
2.4.1 ファイルとクラス名の規約
通常、ファイル名はアンダースコア記法(underscored)を使い、クラス名にはキャメル記法(CamelCased)を使います。例えば、KissesAndHugsControllerクラスは、kisses_and_hugs_controller.phpというファイルの中にあります。
しかし、ファイル名が必ずクラス名に対応しているというわけではありません。EmailComponentクラスは、email.phpというファイルの中にありますし、HtmlHelperは、html.phpの中にあります。
2.4.2 モデルとデータベースの規約
モデルのクラス名は単数形でキャメル記法です。Person、BigPerson、ReallyBigPerson などは規約に合ったモデル名です。
CakePHP のモデルに対応するテーブル名は、複数形でアンダースコア記法です。上記の例で言えば、テーブル名はそれぞれ、people、big_people、really_big_peopleになります。
hasMany, blongsTo, hasOne 中の外部キーは、デフォルトで関連するモデルの(単数形の)名前に _id を付けたものとして認識されます。ケーキ職人(backer)がケーキ(cakes)を複数持っている(hasMeny)としたら、cakes テーブルは、baker_id を外部キーとして bakers テーブルのデータを参照します。
モデル間の hasAndBelongsToMany (HABTM) の関係で使用される join テーブルは、join するテーブルに合わせて、アルファベット順に(zebras_apples ではなく、apples_zebras)並べた名前にしてください。
CakePHP モデルの相互に作用する全てのテーブル(join テーブルは除く)は、それぞれの列を一意に識別する単一フィールドのプライマリーキーが必要です。もし、posts_tags のような join テーブルの列で、単数形のプライマリーキーではないテーブルのモデルをお望みなら、テーブルに単一フィールドのプライマリーキーを追加することが CakePHP の規約です。
CakePHP は複合主キーをサポートしません。 join テーブルのデータを直接操作したい場合は、直接 query を呼び出すか、通常のモデルのように振舞えるよう主キーを追加してください。例は次のようになります。
CREATE TABLE posts_tags ( id INT(10) NOT NULL AUTO_INCREMENT, post_id INT(10) NOT NULL, tag_id INT(10) NOT NULL, PRIMARY KEY(id));
2.4.3 コントローラの規約
コントローラのクラス名は複数形でキャメル記法です。最後にControllerが付きます。PeopleController、BigPeopleController、ReallyBigPeopleControllerなどは規約に合ったコントローラ名です。
コントローラに最初に書く関数は、おそらくindex()関数でしょう。リクエストによってコントローラは指定されたがアクションは指定されなかったという場合、CakePHP のデフォルト動作では、そのコントローラのindex()関数を実行することになっています。例えば、http://www.example.com/apples/ はApplesControllerのindex()関数を呼ぶようにマップされ、http://www.example.com/apples/view は、ApplesControllerのview()関数にマップされます。
コントローラ関数名の先頭にアンダースコア(_)を付けることで、CakePHP のコントローラ関数を隠蔽することが可能です。アンダースコアが付けられたコントローラ関数は web 上では見えないように設定されます。内部での利用のみ可能になります。例えば:
<?php
class NewsController extends AppController {
function latest() {
$this->_findNewArticles();
}
function _findNewArticles() {
//最新のニュース記事を取得するロジック
}
}
?>
<?phpclass NewsController extends AppController {function latest() {$this->_findNewArticles();}function _findNewArticles() {//最新のニュース記事を取得するロジック}}?>
http://www.example.com/news/latest/ のページを常にユーザーがアクセス可能であったとしても、http://www.example.com/news/_findNewArticles/ を取得しようとするとエラーになります。なぜなら、関数の先頭にアンダースコアが付いているからです。
2.4.3.1 コントローラ名とURL
上で考えたように、単一の用語名のコントローラは、小文字のURLパスにマップされます。例えば、ApplesController(ファイル名は'apples_controller.php')には、http://example.com/applesとしてアクセスできます。
複数の用語を組み合わせた名前のコントローラは、camelCaseを使用したURL規約を使って複数の用語を使っていることを示すようになっています。例えば、RedApplesController(red_apples_controller.php)は、http://example.com/redApplesにマップされ、OperatingSystemsController(operating_systems_controller.php)は、http://example.com/operatingSystemsにマップされます。
2.4.4 ビューの規約
ビューのテンプレートファイルは、それを表示するコントローラの関数に合わせた、アンダースコア記法で名前が付きます。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ブログチュートリアルを試すのも良いでしょう。
3 CakePHPによる開発
それではクッキングタイムといきましょう。
3.1 必要なもの
- HTTPサーバ。mod_rewriteの使えるApacheがお勧めですが、必須条件ではありません。
- PHP 4.3.2以降。CakePHPはPHP4とPHP5の両方で動作します。
厳密に言えば、データベースエンジンは必須ではありません。でも、大部分のアプリケーションではデータベースを利用しています。CakePHPは、様々なデータベースのストレージエンジンに対応しています。
- MySQL (4以降)
- PostgreSQL
- Firebird DB2
- Microsoft SQL Server
- Oracle
- SQLite
- ODBC
- ADOdb
3.2 インストールの準備
CakePHP は素早く簡単にインストールできます。最小構成で必要なものは、ウェブサーバと Cake のコピー、それだけです!このマニュアルでは主に(最も一般的である) Apache でのセットアップに主眼を置いていますが、 Cake を LightHTTPD や Microsoft IIS のような様々なウェブサーバで走らせるよう設定することもできます。
インストールの準備は次のステップからなります。
- CakePHP のコピーをダウンロードする。
- もし必要であればウェブサーバが PHP をハンドルできるよう設定する。
- ファイルパーミッションをチェックする。
3.2.1 CakePHPを入手する
CakePHP の最新版を手に入れるには、主に二つの方法があります。ウェブサイトからアーカイブ(zip/tar.gz/tar.bz2)としてダウンロードする、あるいはリポジトリ(SVN)からコードをチェックアウトする方法のいずれかにより取得できます。
最新のアーカイブをダウンロードするには、 http://www.cakephp.org のウェブサイトに行き、"Download Now!" という大きなリンクに従って進みます。
CakePHP の最新のリリースは CakePHP のホームである CakeForge でホストされています。このサイトは CakePHP の他のプロジェクトへのリンクがあり、それには CakePHP のプラグインやアプリケーションが含まれています。 CakePHP のリリースは http://cakeforge.org/projects/cakephp で入手できます。
これらの代わりに、バグ修正や日ごとに行われる細かな機能追加が含まれたナイトリービルドを取得することもできます。これらは、 http://cakephp.org/downloads/index/nightly のダウンロードインデックスからアクセスできます。アップデート内容の詳細を得るには、 https://svn.cakephp.org/repo/branches/1.2.x.x の SVN リポジトリの開発ブランチを直接チェックアウトしてください。
3.2.2 パーミッションの設定
CakePHP は、幾つかの操作のために/app/tmpディレクトリを使用します。モデルのdescriptionや、ビューのキャッシュ、セッション情報などです。
なので、Cakeのインストール時には、/app/tmpディレクトリに書き込み権限があることを確認してください。
3.3 インストール
CakePHPのインストールは、Webサーバのドキュメントルートに放り込むだけの簡単インストールから、好きなだけ複雑かつ柔軟に設定することまでもできます。このセクションでは、CakePHPの主な3種類のインストール方法について説明します。開発、運用、応用の3種類です。
- 開発(Development):簡単にはじめることができますが、アプリケーションのURLには、CakePHPをインストールしたディレクトリ名が入ります。他の設定と比べるとセキュリティ面はやや弱くなります。
- 運用(Production):Webサーバのドキュメントルートを設定できる必要がありますが、URLをクリーンにでき、セキュリティを固くできます。
- 応用(Advanced):幾つかの設定により、CakePHPの重要な各ディレクトリをファイルシステムの異なる場所に配置することができるので、多くのCakePHPアプリケーションがひとつのCakePHPコアライブラリのフォルダを共有することなどが可能です。
3.3.1 開発(Development)
開発用のインストールは Cake をセットアップする最も早い方法です。この例では CakePHP をインストールし、 http://www.example.com/cake_1_2/ でアクセスできるようにする方法を説明します。ドキュメントルートは /var/www/html であると仮定します。
Cake のアーカイブを /var/www/html に展開してください。ドキュメントルートに、ダウンロードしたリリースの名前がついたフォルダ(例えば cake_1.2.0.7296-rc2)が取得できます。このフォルダを cake_1_2 という名前にリネームしてください。ファイルシステム上の開発用の設定は次のようになります。
- /var/www/html
- /cake_1_2
- /app
- /cake
- /docs
- /vendors
- /index.php
- /cake_1_2
もしウェブサーバが適切に設定されていれば、 http://www.example.com/cake_1_2/ で Cake アプリケーションがアクセス可能になっているはずです。
3.3.2 運用(Production)
運用向けのインストールは Cake をセットアップする最も柔軟な方法です。この方法を使うと、ドメイン全体を単一の CakePHP アプリケーションのように振舞わせることができます。この例では CakePHP を任意のファイルシステムの場所にインストールし、 http://www.example.com でアクセスできるようにする方法を説明します。このインストールにおいては Apache ウェブサーバの DocumentRoot の設定を正しいものに変更する必要が出てくるかもしれないことに注意してください。
Cake のアーカイブを好きなディレクトリに展開してください。この例において、Cake をインストールすると決めたディレクトリは /cake_install であると仮定します。ファイルシステム上の運用向けの設定は次のようになります。
- /cake_install/
- /app
- /webroot (this directory is set as the DocumentRoot directive)
- /cake
- /docs
- /vendors
- /index.php
- /app
Apache を使用する場合は、そのドメインの DocumentRoot ディレクティブを次のように設定してください。
DocumentRoot /cake_install/app/webroot
もしウェブサーバが適切に設定されていれば、 http://www.example.com で Cake アプリケーションがアクセス可能になっているはずです。
3.3.3 応用インストール
ある時には、CakePHPのディレクトリをファイルシステムの別な場所に配置したいと思う場合があるかもしれません。共有しているホストの制限であったり、複数のアプリが同じCakeのライブラリを使うようにしたかったりする場合などです。このセクションでは、どうやってCakePHPのディレクトリをファイルシステム内に分散配置できるのかを説明します。
まず、Cakeアプリケーションには三つの主要な部分があることに注意しましょう。:
- CakePHPのコアライブラリは、 /cakeの中にあります。
- あなたのアプリケーションコードは、/appの中です。
- アプリケーションのウェブルートは、通常、/app/webrootにあります。
この各ディレクトリは、webrootを除いて、ファイルシステム内のどこにでも配置できます。webrootは、Webサーバからアクセスできるようにする必要があります。しかし、Cakeに場所を知らせれば、webrootフォルダをappフォルダの中から取り出すことさえ可能です。
Cakeインストールの環境設定をするには、/app/webroot/index.phpの中を少し修正する必要があります。編集しなくてはいけない三つの定数は、ROOT、APP_DIR、CAKE_CORE_INCLUDE_PATHです。
- ROOTには、アプリのフォルダが含まれているディレクトリのパスを設定します。
- APP_DIRには、アプリのフォルダを設定します。
- CAKE_CORE_INCLUDE_PATHには、CakePHPライブラリフォルダのパスを設定します。
例を挙げて、応用インストールを実践した場合の様子を見てみましょう。CakePHPを次のような条件で動作させたいとします。:
- CakePHPのコアライブラリは/usr/lib/cakeに配置する。
- アプリケーションのwebrootディレクトリは/var/www/mysite/にする。
- アプリケーションのアプリディレクトリは/home/me/mysiteに置く。
このようなセットアップの場合には、 webroot/index.phpファイル(つまり、この例では/var/www/mysite/index.php)が次のようになるよう、編集します。
// /app/webroot/index.php (一部分。コメントは取り除いてあります。)
if (!defined('ROOT')) {
define('ROOT', DS.'home'.DS.'me');
}
if (!defined('APP_DIR')) {
define ('APP_DIR', 'mysite');
}
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib'.DS.'cake');
}
// /app/webroot/index.php (一部分。コメントは取り除いてあります。)if (!defined('ROOT')) {define('ROOT', DS.'home'.DS.'me');}if (!defined('APP_DIR')) {define ('APP_DIR', 'mysite');}if (!defined('CAKE_CORE_INCLUDE_PATH')) {define('CAKE_CORE_INCLUDE_PATH', DS.'usr'.DS.'lib'.DS.'cake');}
ファイルパスの区切り文字には、スラッシュではなくDS定数を使うようにお勧めします。こうしておくと、間違ったデリミタによる、ファイルが無いというエラーを防ぐことができ、コードをさまざまなプラットフォームで動くようにすることができます。
3.3.3.1 各クラス用パスの追加情報
同一システム上にあるアプリケーションで、MVCクラスを共有できると便利な場合もあります。二つのアプリケーションから同じコントローラを使用したい場合には、CakePHPのbootstrap.phpを使って、その追加クラスをビューに接続することが可能です。
bootstrap.phpの中に次のような変数を定義して、CakePHPがMVCクラスを検索しにいく場所を登録してください。
$viewPaths = array(); $controllerPaths = array(); $modelPaths = array(); $helperPaths = array(); $componentPaths = array(); $behaviorPaths = array();
$viewPaths = array();$controllerPaths = array();$modelPaths = array();$helperPaths = array();$componentPaths = array();$behaviorPaths = array();
この特別な各変数は、リクエストがあった時に用いることのできる追加クラスが入っているパス情報の配列として設定できます。それぞれのパス情報の最後がスラッシュで終わるようにしてください。
3.3.4 Apacheとmod_rewrite
CakePHPは、展開した状態ではmod_rewriteを使用するようになっており、ユーザの中には、自分のシステムでうまく動作するまで苦労する人もいます。これは、正しく動かすためにできるいくつかの点です。
- .htaccessのオーバーライドが許可されていることを確認しましょう。場所は、httpd.confの中の、サーバのディレクトリを定義している場所です。正しいドキュメントルートのAllowOverrideがAllになっていることを確かめてください。
- ユーザやサイト特有のhttpd.confではなく、システムのhttpd.confを編集してください。
- CakePHPが必要な.htaccessを見つけられないでいるでしょうか。オペレーティングシステムの中には、'.'ではじまるファイルを隠しファイルとして扱うため、コピーや移動の際に、この現象が発生することがあります。CakePHPのファイルを、サイトのダウンロードセクションからか、SVNリポジトリから入手して、正しく展開するようにしてください。
- mod_rewriteを正しく読み込んでいることを確認してください。LoadModule rewrite_module libexec/httpd/mod_rewrite.soや、AddModule mod_rewrite.cがhttpd.confの中にあることを確認してください。
- CakePHPをユーザディレクトリ(http://example.com/~username)にインストールした場合は、CakePHPインストールのベースディレクトリにある.htaccessファイルを編集してください。"RewriteBase /~myusername/"を追加します。
3.3.5 動作確認
それでは、実際に CakePHP を動作させてみましょう。セットアップの種類にもよりますが、http://example.com/ または http://example.com/cake_install/ をブラウザで開いてみましょう。この時点では、CakePHP のデフォルトのホーム画面と、現在のデータベース接続の状態が表示されるはずです。
Congratulations! CakePHP の最初のアプリケーションを作る準備ができました。
3.4 環境設定
CakePHP アプリケーションの環境設定は cake の一部です。 CakePHP をインストールした後、基本的なウェブアプリケーションを作成するのに必要なことは、データベースの環境設定だけです。
とはいえ、 CakePHP の柔軟なアーキテクチャの利点を生かすためにオプションの環境設定がいくつか存在します。要素の CakePHP コアへの追加、独自の URL の設定、そして独自の語形変化の定義などが簡単に行えます。
3.4.1 データベースの設定
CakePHPは、データベースの詳細設定ファイルをapp/config/database.phpに探します。データベースの設定例のファイルはapp/config/database.php.defaultにあります。設定が終わると次のようになります。
var $default = array('driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'cakephpuser',
'password' => 'c4k3roxx!',
'database' => 'my_cakephp_project',
'prefix' => '');
var $default = array('driver' => 'mysql','persistent' => false,'host' => 'localhost','login' => 'cakephpuser','password' => 'c4k3roxx!','database' => 'my_cakephp_project','prefix' => '');
$default接続配列は、モデル内で$useDbConfigの値を変更して別な接続を指定しない限り使用されます。例えば、アプリケーションがデフォルトのデータベースに加えて、既存(legacy)の追加データベースも使用しなければいけない、としましょう。$default配列と同形式で$legacyデータベース接続用の配列を作成します。それから、該当するモデルの中でvar $useDbConfig = ‘legacy’とすることで、それを使えるようになります。
必要に合わせて、設定配列の中に、キー/値のペアを書き込んでください。
| キー | 値 |
|---|---|
| driver | この設定用配列は、データベースのドライバ名を入力する場所です。例えば、mysql, postgres, sqlite, pear-drivername, adodb-drivername, mssql, oracle, odbc などです。 |
| persistent | 持続的接続(persistent connection)を使うかどうか設定します。 |
| host | データベースサーバのホスト名。(またはIPアドレス) |
| login | アカウントユーザ名 |
| password | アカウントのパスワード。 |
| database | この接続が利用するデータベース名。 |
| prefix (オプション) | データベース内のすべてのテーブルの頭に付ける接頭辞(prefix)です。もしテーブルに接頭辞が付いていないのであれば、指定しないでください。 |
| port (オプション) | サーバに接続するためのTCPポート、またはUnix socket。 |
| encoding | サーバにSQLステートメントを送信する際に使用するキャラクターセット。(訳注:MySQLで日本語を使うには、"utf8","ujis","sjis"などを設定します。) |
| schema | PostgreSQLデータベースの設定時に、どのスキーマを使うかを指定します。 |
prefixの設定は、モデルではなく、テーブルに対するものだということを覚えておきましょう。例えば、AppleモデルとFlavorモデルのjoinテーブルを作成する場合、prefix_apples_flavorsという名前になります。(prefix_apples_prefix_flavorsではありません。)そして、prefixの設定は、'prefix_'となります。
この時点で、このマニュアルの付録部分の一覧にある、CakePHPの規約について少し読むのもよいかもしれません。テーブル(そして幾つかのフィールド名)の正しい命名方法を知っておくと、幾つかの機能をすぐに使えるようになり、設定する必要がなくなります。
3.4.2 コアの設定
CalePHPのアプリケーション設定は、/app/config/core.phpの中にあります。このファイルは、アプリケーションの動作を決める、Configureクラスの変数定義と定数定義の集まりです。この各変数について設定する前に、CakePHPの環境設定レジストリクラス、Configureについてある程度知っておく必要があります。
3.4.3 Configurationクラス
CakePHPで設定しなければいけないことはそれほど多くありませんが、アプリケーションの中に独自のルールを設定できるようにしておくと、便利なことがあります。これまではカスタム設定に関する変数や定数をいくつかのファイルの中に定義していたかもしれませんが、そうすると、値が必要になるたびに、毎回、設定ファイルをincludeしなくてはならなくなります。
CakePHPの新しいConfigureクラスを使うと、アプリケーション、またその実行時に必要な特定の値の保存と取り出しに使うことができます。このクラスの中には何でも保存でき、コード内のあらゆる場所で使用できるので、CakePHPのMVCパターンを崩してしまう誘惑には注意しましょう。Configureクラスの主要な目標は、各変数を集中保管して、各オブジェクトから使用できるようにすることです。“設定より規約”(convention over configuration)を遵守するようにして、MVC構造を壊してしまうことがないようにしましょう。
このクラスは singleton として動作し、メソッドは静的なコンテキストとして、アプリケーション内のどこからでも呼ぶことができます。
<?php Configure::read('debug'); ?>
<?php Configure::read('debug'); ?>
3.4.3.1 Configureのメソッド
3.4.3.1.1 write
write(string $key, mixed $value)
write()を使って、アプリケーションの設定データを保存します。
Configure::write('Company.name','株式会社ピザ');
Configure::write('Company.slogan','体と心にピザを');
Configure::write('Company.name','株式会社ピザ');Configure::write('Company.slogan','体と心にピザを');
$keyのパラメータとして、ドットを使っていることに注意してください。このドットを使って、論理グループごとに設定を整理することができます。
Configure::write(
'Company',array('name'=>'株式会社ピザ','slogan'=>'体と心にピザを')
);
Configure::write('Company',array('name'=>'株式会社ピザ','slogan'=>'体と心にピザを'));
Configure::write('debug', $int)を使って、デバッグと運用モードをすぐに切り替えることができます。AMFやSOAPなどとの連携の際、デバッグ情報のためにパースに問題が生じるような場合に特に便利に使うことができます。
3.4.3.1.2 read
read(string $key = 'debug')
アプリケーションから、環境設定データを読み込むために使います。デフォルトでは、CakePHPの重要なデバッグ値が設定されています。keyが指定されると、そのデータが返されます。上のwrite()の例を使うと、返される次のようなデータを取得できます。
Configure::read('Company.name'); //出力は: '株式会社ピザ'
Configure::read('Company.slogan'); //出力は: '体と心にピザを'
Configure::read('Company');
//出力は:
array('name' => '株式会社ピザ', 'slogan' => '体と心にピザを');
Configure::read('Company.name'); //出力は: '株式会社ピザ'Configure::read('Company.slogan'); //出力は: '体と心にピザを'Configure::read('Company');//出力は:array('name' => '株式会社ピザ', 'slogan' => '体と心にピザを');
3.4.3.1.3 delete
delete(string $key)
アプリケーションの環境設定から情報を削除するのに使います。
Configure::delete('Company.name');
Configure::delete('Company.name');
3.4.3.1.4 load
load(string $path)
指定したファイルから環境設定をloadするためにこのメソッドを使ってください。
// /app/config/messages.php:
<?php
$config['Company']['name'] = '株式会社ピザ';
$config['Company']['slogan'] = '体と心にピザを';
$config['Company']['phone'] = '555-55-55';
?>
<?php
Configure::load('messages');
Configure::read('Company.name');
?>
// /app/config/messages.php:<?php$config['Company']['name'] = '株式会社ピザ';$config['Company']['slogan'] = '体と心にピザを';$config['Company']['phone'] = '555-55-55';?><?phpConfigure::load('messages');Configure::read('Company.name');?>
ファイルの中では、 $config 配列のキーと配列のペアで設定されます。ファイル内のその他の変数は、 load() では無視されます。
3.4.3.1.5 version
version()
現在のアプリケーションのCakePHPのバージョンを返します。
3.4.3.2 CakePHPコアの環境設定変数
Configureクラスは、CakePHPの一連の環境設定変数を管理するために使用されます。これらの変数は、app/config/core.phpの中にあります。下記では、各変数の詳細とCakePHPアプリケーションにどのように影響するかを説明します。
| 環境変数設定 | 説明 |
|---|---|
| debug |
CakePHPのデバッグ出力を変更します。 0 = 運用モード。出力しません。 1 = エラーと警告を表示します。 2 = エラー、警告、SQLを表示します。 3 = エラー、警告、SQL、コントローラの完全なdumpを表示します。 |
| App.baseUrl | CakePHPでApacheのmod_rewriteを使用しないのであれば、この定義をアンコメントしてください。.htaccessファイルを削除するのも忘れないようにしてください。 |
| Routing.admin | CakePHPの管理者ルート(admin routes)を活用する場合にはアンコメントします。使用したい管理者routeの名前をこの変数に設定してください。詳細な説明が後にもあります。 |
| Cache.disable | trueに設定すると、サイト全体のキャッシュが無効になります。 |
| Cache.check | trueに設定すると、ビューのキャッシュが有効になります。有効にするためにコントローラ内の設定も必要ですが、この変数によって、設定を調べるようになります。 |
| Session.save |
CakePHPがどのセッションストレージを使用するかを指定します。 php = PHPのデフォルトのセッションストレージを使用します。 cake = セッションデータを /app/tmp の中に保存します。 database = セッションデータをデータベーステーブルの中に保存します。/app/config/sql/sessions.sqlにあるSQLファイルを使用して、テーブルを設定しておいてください。 |
| Session.table | セッション情報を保存するテーブル名(接頭辞[prefix]は含めません。) |
| Session.database | セッション情報を保存するデータベース名。 |
| Session.cookie | セッションをtrackするのに用いられるクッキー名。 |
| Session.timeout | セッションタイムアウトの基本時間を秒で指定します。実際の時間は、Security.levelに依存します。 |
| Session.start | trueに設定すると、セッションが自動的に始まります。 |
| Session.checkAgent | falseに設定すると、リクエストの間にユーザエージェントが変更されていないかをCakePHPのセッションが確認しなくなります。 |
| Security.level |
CakePHPのセキュリティレベルを設定します。'Session.timeout'で設定されたセッションタイムアウトの基本時間に、この設定による値をかけたものが最終的な値になります。 有効な値: 'high' = x 10 'medium' = x 100 'low' = x 300 |
| Security.salt | セキュリティを考慮したハッシングのために利用されるランダムな文字列です。 |
| Acl.classname, Acl.database | CakePHPのACL(アクセスコントロールリスト)機能で利用される定数です。詳細は Access Control Lists の章を見てください。 |
キャッシュの設定は、core.php にもあります。この点については後の章にもありますので参考にしてください。
Configureクラスは、サイトの動作中に、コアの環境設定を読み書きすることができます。たとえば、アプリケーションの中で、ある特定の部分だけデバッグ設定を変えたいというような場合などに特に便利です。
3.4.3.3 Configuration定数
ほとんどの環境設定はConfigureで行いますが、CakePHPが実行時に使用する定数がほかにもあります。
| 定数 | 説明 |
|---|---|
| LOG_ERROR | エラーに関する定数。エラーログどデバッグに用いられます。現在、PHPはLOG_DEBUGをサポートしています。 |
3.4.4 App クラス
CakePHPにおけるクラスのロード処理はさらに合理化されました。前のバージョンでは、ロードしたいクラスの型に基づいて必要なクラスのロード処理に対して様々な関数群が存在しました。この関数群の使用は推奨されなくなりました。あらゆるクラスおよびライブラリのロードするには現在、App::import()を使用します。App::import()は次のことを保証します。クラスが1度しかロードされないこと。適切な親クラスがロードされること。そして多くのクラスで自動的にパスを解決することです。
3.4.4.1 Using App::import()
App::import($type, $name, $parent, $search, $file, $return)
初めて App::import を見ると複雑に見えるかもしれません。でも、多くの場合は2つの引数だけが必須になっています。
3.4.4.2 コアライブラリのインポート
SanitizeやXmlといったコアのライブラリは、次の方法で読み込みます。
<?php App::import('Core', 'Sanitize') ?> <?php App::import('Core', 'Sanitize') ?>
これで、Sanitizeクラスが使えるようになります。
3.4.4.3 コントローラ、モデル、コンポーネント、ビヘイビア、ヘルパのインポート
アプリケーションに関連するすべてのクラスをApp::import()で読み込めます。以下の例を参照してください。
3.4.4.3.1 コントローラの読み込み
App::import('Controller', 'MyController')
3.4.4.3.2 モデルの読み込み
App::import('Model', 'MyModel')
3.4.4.3.3 コンポーネントの読み込み
App::import('Component', 'Auth')
3.4.4.3.4 ビヘイビアの読み込み
App::import('Behavior', 'Tree');
3.4.4.3.5 ヘルパーの読み込み
App::import('Helper', 'Html'); App::import('Helper', 'Html');
3.4.4.4 プラグインの読み込み
プラグインのクラスを読み込むのは、appとコアのクラスを読み込むのとほぼ同じです。しかし、読み込み元のプラグイン名を指定してください。
App::import('Model', 'PluginName.Comment'); App::import('Model', 'PluginName.Comment');