0

我的过程

  1. 制作插件单元

    $ bin/cake bake plugin Abc
    
    $ bin/cake bake cell Abc.New
    

上层进程制作3个文件

    plugins/Abc/src/View/Cell/NewCell.php

    plugins/Abc/src/Template/Cell/Menu/display.php

和测试文件。

  1. 插入 layout/default.ctp 下一个代码

     <?php $cell = $this->cell('Abc.New'); ?>
    
  2. 错误

单元类 Abc.New 丢失。

Cake\View\Exception\MissingCellException

我找不到解决方案。请帮我!!

4

1 回答 1

2

帖子有点旧,但万一其他人偶然发现了这个帖子......

单元依赖命名空间来加载和呈现正确的 [cell].ctp 文件。换句话说,即使您已经完成了Plugin::loadAll();bootstrap.php 文件中的要求,您仍然需要修改 composer.json 文件并添加插件。例如,我的插件名为“Metronic”,请注意autoloadautolaod-dev

  "autoload": {
    "psr-4": {
      "App\\": "src",
      "Metronic\\": "./plugins/Metronic/src"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "App\\Test\\": "tests",
      "Cake\\Test\\": "./vendor/cakephp/cakephp/tests",
      "Metronic\\Test\\": "./plugins/Metronic/tests"
    }
  },

请参阅此处的 CakePHP 手册http://book.cakephp.org/3.0/en/plugins.html#autoloading-plugin-classes

我的建议是你以后使用 Bake 命令来创建插件。手册没有明确说明这一点,但是当您使用 Bake 命令时会发生这种情况:

  • 它为插件创建基本目录结构
  • 它在 bootstrap.php 中插入一行,例如Plugin::load('Metronic', ['bootstrap' => false, 'routes' => true]);
  • 它在 composer.json 文件中插入 2 行(根据我上面的示例)

你唯一需要做的就是告诉 Composer 刷新它的自动加载缓存

$ bin\cake bake plugin Metronic
$ php composer.phar dumpautoload

希望这可以帮助..

于 2016-07-06T06:46:34.033 回答