无法创建简单的CakePHP插件

时间:2015-11-24 15:21:22

标签: cakephp plugins cakephp-3.0 cakephp-3.1 cakephp-3.x

我想为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]);

但是现在,文档sais

  

“如果您想访问我们迄今为止所做的事情,请访问   /咨询经理/联系人。你应该得到一个“遗失模型”错误   因为我们还没有定义联系人模型。“

但这不起作用。相反,我得到一个错误:

  

缺少控制器。   蛋糕\路由\异常\ MissingControllerException。   Cake \ Routing \ Dispatcher-> dispatch ROOT / webroot / index.php,第37行   错误:找不到ContactManagerController。错误:创建   下面的文件中的ContactManagerController:   SRC /控制器/ ContactManagerController.php

这意味着无法加载插件,否则不会建议这样做。在“Include”下打开DebugKit时,插件不在插件数组中。

我检查了composer.json文件,并在插件中正确列出。 bake命令没有错误地运行。我尝试了多个具有不同名称的新项目的上述步骤。

这是什么问题?非常感谢你。

1 个答案:

答案 0 :(得分: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();
});