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 回答