15

最近リリースされたCakePHP 3(ベータ2)バージョンで作業しています。PHP SDK を使用して Facebook ログインを統合する必要がありますが、このバージョンでベンダー ファイルをインポートする方法がよくわかりません。
CakePHP 2x では、私は使用していました

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

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

4

5 に答える 5

20

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();

于 2015-07-07T16:21:03.987 に答える
2

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

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

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

1 - 次のように、bootstrap.php で新しい cakephp 定数を定義します。VENDOR 定数は Cakephp 3.x で削除されたので、自分で定義できます 2 - その後、次のようなベンダー定数でベンダー名、パッケージ名、およびクラス名を指定する必要があります。 $facebookApi = new \\(); を実行できます。

これは、質問で期待どおりに機能します

問題が発生した場合は、私に連絡してください。ここで説明されている使用例を示します...

于 2015-04-07T10:47:11.797 に答える
0

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

将来誰かに役立つことを願っています。

于 2017-03-26T22:15:06.080 に答える