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') ?>
  1. <?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');
  1. App::import('Helper', 'Html');

3.4.4.4 プラグインの読み込み

プラグインのクラスを読み込むのは、appとコアのクラスを読み込むのとほぼ同じです。しかし、読み込み元のプラグイン名を指定してください。

App::import('Model', 'PluginName.Comment');
  1. App::import('Model', 'PluginName.Comment');

3.4.4.5 Vendor ファイルの読み込み

vendor() 関数は非推奨になりました。vendor ファイルはこれまでと同様に App::import() を使用して読み込むようになりました。構文はわずかに異なり、引数が追加されています。これは vendor ファイルの構造は大きく異なっていたり、すべての vendor ファイルにクラスが含まれているとは限らないためです。

以下は、いくつかのパス構造から vendor ファイルをどのように読み込むかという例です。vendor ファイルは、vendor フォルダにあると仮定します。

3.4.4.5.1 Vendor の例

vendors/geshi.php を読み込むには

App::import('Vendor', 'geshi');
  1. App::import('Vendor', 'geshi');

vendors/flickr/flickr.php を読み込むには

App::import('Vendor', 'flickr/flickr');
  1. App::import('Vendor', 'flickr/flickr');

vendors/some.name.php を読み込むには

App::import('Vendor', 'SomeName', array('file' => 'some.name.php'));
  1. App::import('Vendor', 'SomeName', array('file' => 'some.name.php'));

vendors/services/well.named.php を読み込むには

App::import('Vendor', 'WellNamed', array('file' => 'services'.DS.'well.named.php'));
  1. App::import('Vendor', 'WellNamed', array('file' => 'services'.DS.'well.named.php'));