【问题标题】:CakePHP3 Plugin cell is missingCakePHP3 插件单元丢失
【发布时间】:2016-02-04 10:49:58
【问题描述】:

我的过程

  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

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

【问题讨论】:

  • 你加载你的插件了吗?
  • ^^ 当然~ Plugin::loadAll();

标签: cell cakephp-3.1


【解决方案1】:

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

单元依赖命名空间来加载和呈现正确的 [cell].ctp 文件。换句话说,即使你已经在 bootstrap.php 文件中完成了所需的Plugin::loadAll();,你仍然需要修改 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' =&gt; false, 'routes' =&gt; true]);
  • 它在 composer.json 文件中插入 2 行(根据我上面的示例)

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

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

希望这会有所帮助..

【讨论】:

    猜你喜欢
    • 2016-08-08
    • 2014-07-25
    • 1970-01-01
    • 2014-04-16
    • 2021-10-29
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    相关资源
    最近更新 更多