CakePHP3插件单元格缺失

时间:2016-02-04 10:49:59

标签: cell cakephp-3.1

我的过程

  1. 制作插件单元格

    $ bin/cake bake plugin Abc
    
    $ bin/cake bake cell Abc.New
    
  2. 上层流程制作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. 错误

    3.   

      Cell class Abc.New缺失。

           

      蛋糕\视图\异常\ MissingCellException

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

1 个答案:

答案 0 :(得分:1)

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

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

中的额外2行
  "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

希望这会有所帮助..