CakePHP 3 プラグインの名前空間をベンダー名付きにする方法

標準

詳しくはこちらを、

Plugins — CakePHP Cookbook 3.x documentation

CakePHP 3の標準ではプラグイン名=名前空間名となります。

Fooというプラグイン名なら、モデルやコントローラーの名前空間は、\Foo\Model\Foo\Controllerになります。
AcmeCorp\ContactManager\Model, AcmeCorp\ContactManager\Controllerのようにベンダー名などを含めた名前空間をプラグインで使用したい場合は、以下のように/で区切って呼び出します。

// Loads a plugin with a vendor namespace at top level.
Plugin::load('AcmeCorp/ContactManager');

Plugin::loadAll()では、vendor/cakephp-plugin.phpに記述されていないベンダー名のついた名前空間のプラグインは呼び出されないので、注意してください。

この場合のcomposer.jsonのパスマッピングの記述は以下のようになるべきです。

"psr-4": {
    (...)
    "AcmeCorp\\Users\\": "./plugins/AcmeCorp/Users/src",
    "AcmeCorp\\Users\\Test\\": "./plugins/AcmeCorp/Users/tests"
}

プラグインのテーブルを呼び出す場合は以下のようになります。

// AcmeCorp/ContactManagerプラグインのContactsTable呼び出し
TableRegistry::get('AcmeCorp/ContactManager.Contacts');

また、いまのところはbakeコマンドでベンダー名付きの名前空間でプラグインを作成することはできないようです。作成後、本体側のcomposer.json, vendor/cakephp-plugin.phpとプラグイン側のcomposer.jsonを手動で変更しなければなりませんので注意してください。

コメントを残す

Page optimized by WP Minify WordPress Plugin