web-dev-qa-db-ja.com

CakePHP 3xでベンダーファイルをインポートする方法

私は働いています CakePHP 3(ベータ2) 最近発売されたバージョン。 PHP SDKを使用してFacebook Loginを統合する必要があり、このバージョンでベンダーファイルをインポートすることについて明確ではありません。
CakePHP 2xでは、

App::import('Vendor', 'Facebook', array('file' => 'Facebook' . DS . 'src'. DS. 'facebook.php'));

だから、CakePHP 3xで同じものを再現する必要があります(私は作曲家を使用していません)。
これに関する参照はありますか?

15
G.J

composerがオプションではない場合、自分でロードする必要があります。常に非常に基本的なrequireメソッドを使用し、ベンダークラスの新しいインスタンスを自分で作成できます。参照: http://book.cakephp.org/3.0/en/core-libraries/app.html#loading-vendor-files

使用する:

 //The following line should do the same like App::import() in the older version of cakePHP
 require_once(ROOT . 'vendor' . DS  . 'Facebook' . DS . 'src' . DS . 'facebook.php');

 $facebookApi = new facebook();
20
Ayman Bedair

Cakephp3で、新しいベンダーライブラリを追加するには、次の手順に従います。

  1. ライブラリフォルダーを_your_project/vendor/_の下に配置します
  2. require_once(ROOT . DS . 'vendor' . DS . "my_library_folder" . DS . "my_library_base_class.php")を使用してライブラリファイルを含めます。これにより、コードにライブラリコードファイルが含められます。
  3. 次のように、コントローラーの上部にクラス名を含めます。

_namespace App\Controller; use MyLibraryBaseClass;_、

これにより、使用する名前空間にライブラリコードファイルがインポートされます。

  1. ロードされたクラスのオブジェクトを作成します

    $my_obj= new MyLibraryBaseClass();

19
Dashrath

ayman B.によって提供された答えは、次の理由で、私が自分で試した後、質問で期待どおりに仕事をしているようには見えません:

  • cakephp3のベンダーフォルダーはAPP名前空間の下のsrcフォルダーにありません。ROOTフォルダーに移動します。そうすると、Facebookクラスを期待どおりにロードできなくなります。自分で試してみて、結果が表示されます。
  • ベンダーファイルをロードしても、ベンダーライブラリがPSR-0ルールとして以下のルールに従っていない場合、これはクラス名自体を自動的にロードしません:\ VENDOR\PACKAGE\TEST.CLASS.PHPおよびtest.class.php内次のように、このスクリプトの冒頭に定義された名前空間キーワードを使用してスクリプトで呼び出しまたはインポートする必要のあるクラス定義はありません。名前空間、上記のコードは機能しません

答えを修正するには、次のようにいくつかの手順を実行する必要があります。

1-bootstrap.phpで以下のような新しいcakephp定数を定義します:define( 'VENDOR'、ROOT。DS。 'vendor' .DS); VENDOR定数はcakephp 3.xで削除されるため自分で定義できます2-その後、次のようなベンダー定数でベンダー名、パッケージ名、クラス名を指定する必要があります:define( '_' ,;そして、$ facebookApi = new \\( );

これは質問で予想されたとおりに機能します

あなたが私に戻って取得しようとする問題がある場合、私はあなたにここで説明したように使用例を示します...

2
Shabasha

CakePHP 3.0でも同じ問題がありました。

Composerを使用して指示に従ってインストールを行います。

次に、useステートメントを使用して、コントローラーにプラグインを適切にロードする必要があります。このような:

Ghunti\HighchartsPHP\Highchartを使用;

  • ほとんどのページでプラグインを使用している場合、各コントローラーにロードする代わりに、bootstrap.phpファイルに同じ行を追加できます、他のuseステートメントのすぐ下。

これにより、プラグインを使用する問題が解決されます。

1
DecoMartins

CakePhp 3.xの時点で、推奨されるコード標準は、角括弧「()」なしでrequire_onceを使用することです。

require_once(ROOT.'Folder'.DIRECTORY_SEPARATOR.'requiredfile.ph ');

になる

require_once ROOT.'Folder'.DIRECTORY_SEPARATOR.'requiredfile.ph ';

https://book.cakephp.org/3.0/en/contributing/cakephp-coding-conventions.html

それが将来誰かを助けることを願っています。

0
jilord2