App クラスはパスの管理、クラスのロケーション、そしてクラスのローディングの責務を担っています。 念のため ファイルとクラス名の規約 に従っていることを確認して下さい。
CakePHP はパッケージの考え方を中心に編成され、それぞれのクラスは他のクラスが存在するパッケージやフォルダに属します。 それぞれのクラスをどの場所でロードするべきなのかをフレームワークに通知するため、 App::build('APackage/SubPackage', $paths) を使用して各パッケージの場所を設定することができます。 CakePHP のフレームワークのほぼすべてのクラスは、あなた独自の互換性のある実装と入れ替えることができます。 フレームワークが提供するクラスの代わりに独自のクラスを使用したい場合は、ただ単に、CakePHP の探索が期待できるディレクトリの配置を模倣した libs フォルダにクラスを追加するだけです。
例えば、あなた独自の HttpSocket クラスを用いたいなら以下のように配置します:
app/Lib/Network/Http/HttpSocket.php
一度このようにやりさえすれば、 App は CakePHP 内部のファイルの代わりにあなたが再定義したファイルをロードします。
戻り値の型: | void |
---|
CakePHPではクラスは遅延ロードされますが、オートローダがクラスを発見出来るためには、どこでファイルを見つけられるのかをまず App に伝えなくてはなりません。 どのパッケージでクラスを発見できるのかを App に伝えることで、あるクラスを初めて使用するときに適切にファイルを見つけることができるのです。
一般的なクラスの例をいくつか挙げます:
つまり基本的に、第二パラメータは、コアまたはアプリ内のクラスファイルのフォルダパスと単純に一致させなくてはなりません。
ノート
ベンダーのローディングは通常、規則に従わないパッケージのローディングを意味します。 多くのベンダーのパッケージに対しては App::import() の使用が推奨されます。
プラグインからのクラスのローディングは、ロード元になるプラグインを指定する以外は、app や core のクラスのローディングとまったく同じように動作します:
// app/Plugin/PluginName/Model/Comment.php にある Comment クラスをロードする
App::uses('Comment', 'PluginName.Model');
// app/Plugin/PluginName/Controller/Component/CommentComponent.php にある CommentComponent クラスをロードする
App::uses('CommentComponent', 'PluginName.Controller/Component');
戻り値の型: | array |
---|
保存されたパス情報を読み込むために用いる:
// アプリケーション内のモデルのパスが返る
App::path('Model');
アプリケーション内のすべてのパッケージに対してこれを実行できます。 プラグインに対するパスを取得することもできます:
// DebugKit 内のコンポーネントのパスが返る
App::path('Component', 'DebugKit');
戻り値の型: | array |
---|
現在読み込まれているすべてのパスを App から取得します。 App が把握している全てのパスを調べたり記憶したりするのに便利です。 特定のパッケージのパスを扱う場合は App::path() を使用します。
戻り値の型: | array |
---|
CakePHP 内部のパッケージのパスを見つけるために用いられます:
// Cache エンジンへのパスを取得する
App::core('Cache/Engine');
戻り値の型: | string |
---|
クラスが定義された場所のパッケージ名を返します。
戻り値の型: | void |
---|
ファイルシステム上の各パッケージの場所を設定します。 パッケージごとに複数の探索パスを設定することができ、それらは、ファイルがあるフォルダを一度だけ探すために指定された順序で使用されます。 すべてのパスはディレクトリセパレータで終了する必要があります。
例えばコントローラのパスを追加すると、CakePHPがコントローラを探すパスを置き換えることになるでしょう。 この仕組みが、アプリケーションをファイルシステムから分離させてくれます。
使い方:
//Modelパッケージのための新しい探索パスがセットアップされます
App::build(array('Model' => array('/a/full/path/to/models/')));
//このパスはモデルを探索するための唯一正しいパスとしてセットアップされます
App::build(array('Model' => array('/path/to/models/')), App::RESET);
//ヘルパーの複数の探索パスがセットアップされます
App::build(array('View/Helper' => array('/path/to/helpers/', '/another/path/')));
reset が true に設定されている場合、ロードされたすべてのプラグインは忘れ去られ、それらは再びロードされる必要があります。
例:
App::build(array('controllers' => array('/full/path/to/controllers/')));
//このようになりました
App::build(array('Controller' => array('/full/path/to/Controller/')));
App::build(array('helpers' => array('/full/path/to/views/helpers/')));
//このようになりました
App::build(array('View/Helper' => array('/full/path/to/View/Helper/')));
バージョン 2.0 で変更: App::build() はもはや app のパスと core のパスをマージしません
App::build() は新しいパッケージの場所を追加するために用いられます。 アプリケーションに新しいトップレベルのパッケージや、サブパッケージを追加したい場合に便利です:
App::build(array(
'Service' => array('%s' . 'Service' . DS)
), App::REGISTER);
新しく登録されたパッケージの %s は、 APP パスに置き換えられます。 登録されるパッケージの末尾には / を含める必要があります。 いったんパッケージを登録すれば、App::build() を他のパッケージのように、パスの 後方追加/前方追加/リセット のために使用することができます。
バージョン 2.1 で変更: パッケージの登録は 2.1 で追加されました
戻り値の型: | mixed 与えられた型のオブジェクトの配列か、不正な場合は false を返します。 |
---|
App::objects('Controller') を用いて、Appが把握しているオブジェクト、例えば App が把握しているアプリケーションのコントローラ、を見出せます。
使用例:
//returns array('DebugKit', 'Blog', 'User');
App::objects('plugin');
//returns array('PagesController', 'BlogController');
App::objects('Controller');
プラグインドット記法を用いることで、そのプラグイン内においてのオブジェクトを探すこともできます:
// returns array('MyPluginPost', 'MyPluginComment');
App::objects('MyPlugin.Model');
バージョン 2.0 で変更.
戻り値の型: | string |
---|
プラグインも同じように App で配置できます。 例えば App::pluginPath('DebugKit'); を用いることで DebugKit プラグインへのフルパスをあなたに与えます:
$path = App::pluginPath('DebugKit');
戻り値の型: | string |
---|
App::themePath('purple'); のように呼ぶと、 purple テーマのフルパスを取得することができます。
戻り値の型: | boolean |
---|
一見すると App::import は複雑に見えます。 しかしながら、ほとんどのケースではただ二つの引数が要求されるのみです。
ノート
このメソッドはファイルを require することと同じです。 その後、クラスの初期化が必要だと理解しておくことは重要です。
// require('Controller/UsersController.php'); と同じ
App::import('Controller', 'Users');
// クラスのロードが必要
$Users = new UsersController();
// モデル連携やコンポーネントなどがロードされるようにしたい場合
$Users->constructClasses();
かつて App::import(‘Core’, $class) を用いてロードされたすべてのクラスは、 App::uses() を用いた、正しいパッケージを参照したロードが必要になりました。 この変更は、フレームワークに大きなパフォーマンスの向上をもたらしました。
バージョン 2.0 で変更.
フレームワークのほぼすべてのクラスはオーバーライドすることができます。 例外は App と Configure クラスです。 そのようにオーバーライドを実行したいならばどんな場合であれ、フレームワークの内部構造を真似て app/Lib フォルダにクラスを追加する、ただそれだけです。 いくつかの例を挙げます:
置き換えたファイルをロードすると、 app/Lib のファイルが組み込みのコアクラスの代わりにロードされます。
App::uses() をベンダーのディレクトリ内のクラスをロードするのに使うことが出来ます。 これは他のファイルを読み込むのと同じ規則に従います:
// app/Vendor/Geshi.php 内の Geshi クラスをロードする
App::uses('Geshi', 'Vendor');
サブディレクトリ内のクラスをロードするには、それらのパスを App::build() で追加する必要があります:
// app/Vendor/SomePackage/ClassInSomePackage.php 内の ClassInSomePackage クラスをロードする
App::build(array('Vendor' => array(APP . 'Vendor' . DS . 'SomePackage')));
App::uses('ClassInSomePackage', 'Vendor');
ベンダーのファイルは、規則に従っていなかったり、ファイル名と異なるクラスを持っていたり、クラスを含んでないかもしれません。 それらのファイルは App::import() を使用して読み込むことができます。 次の例では、いくつかのパス構造からベンダーファイルをロードする方法を示しています。 これらのベンダーファイルは、ベンダーのフォルダのいずれかに配置することができます。
app/Vendor/geshi.php をロードする:
App::import('Vendor', 'geshi');
ノート
Cake が他のファイルを見出してしまわないために、geshi のファイル名は、小文字でなくてはなりません。
app/Vendor/flickr/flickr.php をロードする:
App::import('Vendor', 'flickr/flickr');
app/Vendor/some.name.php をロードする:
App::import('Vendor', 'SomeName', array('file' => 'some.name.php'));
app/Vendor/services/well.named.php をロードする:
App::import('Vendor', 'WellNamed', array('file' => 'services' . DS . 'well.named.php'));
app/Plugin/Awesome/Vendor/services/well.named.php をロードする:
App::import('Vendor', 'Awesome.WellNamed', array('file' => 'services' . DS . 'well.named.php'));
ベンダーファイルが /vendors ディレクトリ内にあるかどうかに違いはありません。 Cake は自動的にそれを見出します。
vendors/vendorName/libFile.php をロードする:
App::import('Vendor', 'aUniqueIdentifier', array('file' => 'vendorName' . DS . 'libFile.php'));
戻り値の型: | void |
---|
App のキャッシュを初期化し、シャットダウン関数を登録します。
戻り値の型: | boolean |
---|
自動的なクラスローディングを処理するメソッド。 これは、App::uses() を使用して定義された各クラスのパッケージを探し出し、その情報を元に、クラスをロードするためのフルパスとしてパッケージ名を解決します。 各クラスのファイル名はクラス名に従ってください。 たとえばクラス名が MyCustomClass である場合、ファイル名は MyCustomClass.php でなければなりません。
戻り値の型: | void |
---|
オブジェクトのデストラクタ。 $_map に変更が加えられている場合にキャッシュファイルに書き込みます。