web-dev-qa-db-ja.com

CakePHP 2.0でベンダーファイルをロードする

現在、プロジェクトの1つをCakePHP 2.0にアップグレードしています。残念ながら、コードの「最初の行」は問題を引き起こし、その問題の解決策を見つけることができません。

CakePHP 1.3では、AppControllerクラスが定義される直前にApp::import("Vendor", "facebook");ステートメントがありました。参照ファイルは/app/vendors/facebook/facebook.phpの下にあります(それ自体にbase_facebook.phpファイルが含まれます)。

ここで説明するファイルの命名とクラスのロードに従って、CakePHP 2.0にファイルを含めるためのさまざまな方法を試しました: CakePHP 2.0でのファイルの命名とクラスのロードの変更

パスの名前をapp/Vendor/Facebook/Facebook.phpまたはapp/Vendor/Facebook/facebook.phpに変更し、次の方法を試しました。

App::uses("Facebook", "Vendor/Facebook");
App::uses("Facebook", "Facebook");
App::uses("Facebook", "Vendor/Facebook/Facebook.php");
App::uses("Facebook", "Vendor");

ベンダーファイルを参照する方法を見つけた人はいますか?遅延読み込みのため、上記のメソッドはエラー/警告を発しないので、これをデバッグするのは面倒です...

34
Johannes N.

CakePHPでApp::uses()を使用してベンダーをロードすることはできません。これは、CakePHPが外部ライブラリがフォルダーとファイルの命名に関して同じ標準に従うことを期待できないためです。フレームワークのバージョン1.3で使用したように、App::import('Vendor', ...)を引き続き使用できます。

現在、ベンダーにApp::import()を使用するのは、考えてみれば、ちょっとばかげています。これは、require_once()の単なる高価で冗長かつ非常に愚かなラッパーです。

2.0では、実際にベンダーライブラリにrequireまたはrequire_onceを使用することを推奨しています。 App::path('Vendor')または単にAPP . 'Vendor' . DSを使用して、ベンダーフォルダーの場所を取得できます。

ここに/app/vendors/facebook/facebook.phpあるベンダーファイルがあると仮定します。

次の行は、古いバージョンのCakePHPのApp :: import()と同じように実行する必要があります。

 require_once(ROOT . DS . 'app' . DS .'Vendor' . DS  . 'facebook' . DS . 'src' . DS . 'facebook.php');

 $facebookApi = new facebook();
0
Faisal

Cakeのドキュメントでは、App :: uses()の使用が推奨されています includes-files-with-app-import

ただし、App :: Import()を使用する非標準プラグインがあるかどうかも示します

App::import('Vendor', 'phpQuery', array('file' => 'bariew/phpquery/phpQuery/phpQuery.php'));
0
mmv_sat