【问题标题】:CakePHP 3.1 - missing helper error for pluginCakePHP 3.1 - 插件缺少帮助程序错误
【发布时间】:2015-10-23 07:24:14
【问题描述】:

我创建了一个插件,但没有烘焙它,它基本上有一个我想在应用程序中使用的助手。运行 index.php 时出现以下错误:

致命错误:[Cake\View\Exception\MissingHelperException] 帮助程序类 EasyuiHelper 找不到。

 #0 C:\xampp\htdocs\myKMG_3\vendor\cakephp\cakephp\src\Core\ObjectRegistry.php(91): Cake\View\HelperRegistry->_throwMissingClassError('Easyui', 'Easyui')
 #1 C:\xampp\htdocs\myKMG_3\vendor\cakephp\cakephp\src\View\View.php(1001): Cake\Core\ObjectRegistry->load('Easyui.Easyui', Array)
 #2 C:\xampp\htdocs\myKMG_3\src\View\AppView.php(40): Cake\View\View->loadHelper('Easyui.Easyui')
 #3 C:\xampp\htdocs\myKMG_3\vendor\cakephp\cakephp\src\View\View.php(335): App\View\AppView->initialize()
 #4 C:\xampp\htdocs\myKMG_3\vendor\cakephp\cakephp\src\View\ViewBuilder.php(350): Cake\View\View->__construct(Object(Cake\Network\Request), Object(Cake\Network\Response), Object(Cake\Event\EventManager), Array)
 #5 C:\xampp\htdocs\myKMG_3\vendor\cakephp\cakephp\src\View\ViewVarsTrait.php(119): Cake\View\ViewBuilder->build(Array, Object(Cake\Network\Request), Object(Cake\Network\Response), Object(Cake\Event\EventManager))
 #6 C:\xampp\htdocs\myKMG_ in C:\xampp\htdocs\myKMG_3\vendor\cakephp\cakephp\src\Error\ErrorHandler.php on line 156

我按照这个程序来创建插件:

  1. 我创建了食谱中描述的插件结构:http://book.cakephp.org/3.0/en/plugins.html#creating-your-own-plugins
  2. 我在plugins/Easyui/scr/View/Helper EasyuiHelper.php:中为插件创建了助手

    namespace Easyui\View\Helper;
    
    use Cake\View\Helper;
    
    class EasyuiHelper extends Helper {
        public function linkButton($id_image='imgLinkButton', $optionsImg=array()){
            // ...
        }
    }
    
  3. 我在 config/bootstrap 中添加了以下行:

    Plugin::load('Easyui');
    

    这些在View/AppView:

    public function initialize()
    {
        parent::initialize();
        $this->loadHelper('Easyui.Easyui');
    }
    

    还有这个Controller/AppController:

    public $helpers = ['Easyui.Easyui'];
    
  4. 我在默认布局文件中使用帮助器:

    $this->Easyui->linkButton('imgPrint', array('iconCls'=>'icon-print', 'onClick'=>'window.print()'));
    

我哪里做错了? 我错过了什么吗?

【问题讨论】:

    标签: php cakephp cakephp-3.0


    【解决方案1】:

    您需要将路径添加到您的 composer.json 以便自动加载器可以拾取它们。见http://book.cakephp.org/3.0/en/plugins.html#autoloading-plugin-classes

    "autoload": {
        "psr-4": {
            "Easyui\\": "./plugins/Easyui/src",
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Easyui\\Test\\": "./plugins/Easyui/tests",
        }
    }
    

    我建议您始终阅读整个章节,而不仅仅是部分摘录。 ;)

    【讨论】:

    • 我忘了提这个,但我也加了这个。 (所以我读了整章,但感谢您的建议)
    • 你重建了自动加载器吗?作曲家转储自动加载?您可以尝试调试自动加载器并查看它尝试调用该命名空间的路径 - 如果它确实这样做的话。
    • 之后,将 '['autoload' => true]' 添加到 'Plugin::load('Easyui');'有用。 (我建议自己总是一遍又一遍地重读这一章……)
    猜你喜欢
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多