CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法
2019/03/02
CakePHP3で vendorに置いたプラグインを手動で読み込み使う方法解説
CakePHP3でのプラグインは Composerを利用してインストールする方法がメイン
CakePHP3で外部のライブラリやプラグインを使う場合は、Composerを使ってインストールしましょう、と書いてあります。
公式サイトや解説してくれているブログなども Composerを利用する方法の解説がほとんどです。
私も下記の様に、Composerを使ってプラグインをインストールする方法を解説しています。
CakePHP3でcomposerを利用してライブラリ・プラグインをインストールする方法
ですが、自作のライブラリであったり、Composerからインストールするファイルが用意されていないプラグインもありまして、そのようなプラグインをどうやって利用するか、詳しく解説しているサイトが見当たらない状況でした。
そんなある日、とあるサービスの APIを利用して、とある Webサービスを開発することになりましたが、その APIから提供されているサンプルプログラムには Composerを利用してインストールする仕組みが用意されていなかったのです。
そんなわけで、サンプルソースをダウンロードしてきたものの、それをどう使えばいいのかがよく分からない!という状況になってしまったのです。
そんなわけで、Composerを利用せずに外部ライブラリ、プラグインをインストール、読み込む方法、それを利用する方法を調べましたので、解説します。
ちなみに、この記事で解説する方法は、Composerは使用しますので、Composerは必要です。
Composerすら使わない方法はまたいずれ。
「/vendor/」にプラグインのファイル一式を設置
「/vendor/testabc/src/」にプラグインのファイル一式を設置します。
下記のサンプルは、「/vendor/testabc/src/」に設置したファイル一式のうちの一つ、「/vendor/testabc/src/GetTestData.php」ファイルです。
1 2 3 4 5 6 7 8 9 10 11 |
<?php namespace TestAbc; use SoapUtils; class GetTestData { public function getData($id) { require_once(dirname(__FILE__).'/SoapUtils.class.php'); (プラグインの処理) } } |
コントローラーやシェルから呼び出されるファイルの最初には「namespace」を記述します。
ここに記述する「namespace」の名前「TestAbc」は、次の項で説明する「/composer.json」に付けるプラグインの名称、もしくは、プラグインの名称からのパスを記述します。
また、6行目で「require_once()」でファイルを読み込んでいますが、プラグイン内から読み込むファイル「SoapUtils.class.php」には、「namespace」の追加などの対応は必要ありません。
「namespace」の付け方
「namespace」の付け方は先に少し説明しましたが、「/composer.json」に付けるプラグインの名称、もしくは、プラグインの名称からのパスを記述します。
例えば、
「/vendor/testabc/src/GetTestData.php」
にファイルを設置したとします。
そして、「composer.json」には、
「"TestAbc\\": "vendor/testabc/src/"
」
と記述したとします。
この場合の「namespace」は
「namespace TestAbc;
」
となります。
また、「GetTestData.php」を置いたフォルダの中にさらにフォルダを作成し、下記のように
「/vendor/testabc/src/Abc/xyz/GetTestData2.php」
にファイルを設置したとします。
この場合は、「GetTestData.php」のプラグインの関連プログラムなので、「composer.json」は変更しません。
この場合の「namespace」は、「/vendor/testabc/src/」からのパスを付けて記述しますので
「namespace Abc\xyz\TestAbc;
」
となります。
「/composer.json」ファイルにプラグインの情報を追記
続いて、前項で設置したプラグインの情報を「/composer.json」ファイルに記述します。
追加する内容は、下記の 5行目の情報になります。
1 2 3 4 5 6 |
"autoload": { "psr-4": { "App\\": "src/", "TestAbc\\": "vendor/testabc/src/" } |
この「TestAbc」は、自由に分かりやすい名称を付与します。
この名称「TestAbc」は、前項で説明した、呼び出される側のプログラムの「namespace」として設定するほか、Controller側、Shell側で呼び出すときの「use句」で「use TestAbc」のように指定する時の名称になります。
「vendor/testabc/src/」は、プラグインのファイルを設置したフォルダのパスを指定します。
また、3行目の「"src/"
」の行末の「,(カンマ)」の付け忘れに注意しましょう。忘れがちですので。
「composer.json」ファイルの設定変更を有効にするためのコマンドを実行
前項で設定を変更した「composer.json」ファイルの内容を有効にするために、下記のコマンドを実行します。
1 2 3 |
$ composer dump-autoload Generating autoload files > Cake\Composer\Installer\PluginInstaller::postAutoloadDump |
このコマンドを実行することで、下記のファイルなどの「/vendor/composer/」フォルダの中にある設定情報が更新されます。
/vendor/composer/autoload_psr4.php
/vendor/composer/autoload_static.php
Composerにパスが通っていない場合などは、上記のコマンドではエラーが発生する場合があります。
その場合は、下記のコマンドを試してみてください。
1 |
$ php composer.phar dump-autoload |
設定したプラグインをコントローラー、シェルから呼び出す方法
前項までの設定で、プラグイン、ライブラリ側の設定が終り、呼び出せる状態にすることができました。
あとは、コントローラーやシェルに、そのプラグイン、ライブラリを呼び出す記述をするだけです。
サンプルとしてシェル「GetDataShell.php」を作成しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php namespace App\Shell; use Cake\Console\ConsoleOptionParser; use Cake\Console\Shell; use TestAbc; class GetDataShell extends Shell { public function main() { // GetTestDataクラス読み込み $getDataObject = new TestAbc\GetTestData; // データ取得の実行 $getDataArray = $getDataObject->getData(); (以下省略) |
まず、7行目で、「use句」を使ってプラグインを使用することを宣言します。
続いて、14行目の「new TestAbc\GetTestData」ように「プラグイン名 \ クラス名」として、インスタンスを作成します。
これで、ようやく 17行目の記述でアクションが実行できるようになります。
CakePHP3でシェルを作成する方法については、下記の記事で解説しています。
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
一般的には、シェルよりコントローラーとしてプログラムを開発することの方が多いと思いますが、その場合もシェルと大きな違いはありません。
サンプルとしてコントローラー「GetDataController.php」を作成するとすると、下記の様になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php namespace App\Controller; use App\Controller\AppController; use TestAbc; class GetDataController extends AppController { public function index() { // GetTestDataクラス読み込み $getDataObject = new TestAbc\GetTestData; // データ取得の実行 $getDataArray = $getDataObject->getData(); (以下省略) |
まさに「Shell」が「Controller」に変わっただけです。
CakePHP3で vendorに置いたプラグインを手動で読み込み使えるようにする方法のあとがき
APIなどでサンプルとして提供されているソースファイルなどを CakePHP3で使用する場合、vendorの中に設置して、そのサンプルソース、ライブラリなどを利用したい、と思う場面がありました。
ですが、それをどうやったら使えるのか。
ググっても、プラグインのインストールには Composerを使ってインストールしましょう、というサイトばかりが出てきます。
Composerでインストールできるファイルを提供していないプラグインの場合はどうすればいいのでしょうか?
Composerを使わずにインストールする方法が書いてあるサイトも、情報が少なすぎてそのサイトだけを見ても分からないサイトばかりでした。
というワケで、CakePHP3になれていない方であっても分かるように、かなり細かなところまで解説した記事を作成しました。
私と同じように悩んでいる方の助けになれば、と思います。
CakePHP3の関連記事
CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールするCakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
その他の「CakePHP3」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
Windows環境の XAMPPを利用して CakePHPの開発する際の注意点
WindowsベースにXAMPPで環境を構築しCakePHP4を利用したWebシステムを構築する際は、大文字と小文字の違いを意識する必要がある。LinuxベースのWebサーバに移動させたときに不具合で動作しないこともある。
-
-
CakePHP3のアソシエーションでJOINのタイプのLEFT、INNERを切り替えながら使う方法
CakePHP3でテーブルのアソシエーションしたデータの取得をコントローラー側でINNERかLEFTを指定する方法を解説。TableファイルにINNERで指定していてもController側で変更ができる。
-
-
CakePHP3のCakeDC/Usersでログインユーザの所有レコードのみ更新、削除する権限管理の設定方法
CakePHP3のユーザ管理、ログイン認証プラグイン「CakeDC/Users」の権限管理を行う方法やアクセスできるコントローラー、アクションを設定、所有権を持つレコードのみ更新できる設定方法を解説。
-
-
CakePHPのバリデーションを入力値・項目の条件によって変える方法を解説
入力された値によってバリデーション(入力チェック)の内容を切り替える。その処理をCakePHPで実装する方法を解説。条件ごとに unset関数を使ってバリデーションを削除する、という方法を採る。
-
-
CakePHP2、CakePHP3、CakePHP4、CakePHP5のバージョンを調べる 2つの方法
CakePHPのバージョンの調べ方2点を紹介。CakePHP3~CakePHP5は共通だが CakePHP2はフォルダ構成が異なるためコマンドのパスもオプションも異なる。
-
-
CakePHP4のフラッシュメッセージの表示場所、デザインを変更する方法を解説
CakePHP4のエラーメッセージ、完了メッセージなどを表示するフラッシュ処理の解説。Controller、レイアウトファイル、テンプレートファイルでそれぞれ処理を指定する。
-
-
CakePHP3でPHPExcelを使ってエクセルファイルを生成、出力する方法
CakePHP3でPHPExcelを利用してエクセルを編集、出力するサンプルソース+解説。PHPExcelのインストール方法の解説からファイル保存とダウンロードの方法なども解説。
-
-
CakePHP3のデバッグキット(DebugKit)を強制的に有効、無効に変更する方法
CakePHP3に付属しているデバッグのためのツール、デバッグキットを強制的に有効化、無効化する方法を解説。初期設定では開発環境としてありそうなドメインの場合のみ有効になるように設定されている。
-
-
CakePHP3の検索プラグイン「friendsofcake/search」の設置方法・CakePHP3.6対応
CakePHP3で検索を担うプラグイン「friendsofcake/search」の紹介。基本的な設置方法の紹介のほか、処理の記述方法のバリエーション、エラーの解説など。CakeDC/searchより導入は簡単!
-
-
CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP3の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。