2

CakePHP 3.1.4 用のプラグインを作成したいと思います。ドキュメントは簡単ですが、例は機能しません ( http://book.cakephp.org/3.0/en/plugins.html#creating-your-own-plugins )

手順は次のとおりです。

composer create-project --prefer-dist cakephp/app sampleapp

データベースを作成します。データベースに接続します。テーブル「連絡先」を作成します。ディレクトリ内を移動し、次を実行します。

bin/cake bake plugin ContactManager

コントローラーを作成します。

bin/cake bake controller --plugin ContactManager Contacts

オートローダーを再生成します。

composer dumpautoload

次の行を /config/bootstrap.php ファイルに追加します。

Plugin::load('ContactManager', ['routes' => true]);

しかし今、ドキュメントは言う

「これまでに行ったことにアクセスしたい場合は、/contact-manager/contacts にアクセスしてください。連絡先モデルがまだ定義されていないため、「モデルが見つかりません」というエラーが表示されるはずです。

しかし、これはうまくいきません。代わりに、エラーが発生します。

コントローラーがありません。Cake\Routing\Exception\MissingControllerException. Cake\Routing\Dispatcher->dispatch ROOT/webroot/index.php、37 行目 エラー: ContactManagerController が見つかりませんでした。エラー: 以下のファイルに ContactManagerController クラスを作成します: src/Controller/ContactManagerController.php

これは、プラグインをロードできなかったことを意味します。それ以外の場合、これは示唆されません。「インクルード」の下で DebugKit を開くと、プラグインがプラグイン配列にありません。

composer.json ファイルを確認したところ、両方のプラグインが正しくリストされています。ベイク コマンドはエラーなしで実行されました。上記の手順を、名前の異なる複数の新しいプロジェクトで試しました。

ここで何が問題なのですか?どうもありがとうございました。

4

1 に答える 1

3

最後に、解決策を見つけました。

ドキュメントが言う/plugins/ContactManager/config/routes.phpことと作成するものbake plugin

Router::plugin('ContactManager', function ($routes) {
    $routes->fallbacks('DashedRoute');
});

しかし、上記のスニペットの代わりにファイルに本当に必要なものは次のとおりです。

Router::scope('/contactmanager', ['plugin' => 'ContactManager'], function ($routes) {
    $routes->fallbacks();
});
于 2015-11-25T11:30:05.220 に答える