2015-10-23 3 views
1

Я создал плагин, но не испек его, у которого есть помощник, который я хочу использовать в приложении. При запуске index.php я получаю следующее сообщение об ошибке:CakePHP 3.1 - отсутствует ошибка помощника для плагина

Fatal error: [Cake\View\Exception\MissingHelperException] Helper class EasyuiHelper could not be found.

#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. I добавили следующую строку в конфигурационном/начальной загрузки:

    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()')); 
    

Где я ошибся? Я пропустил что-нибудь?

ответ

0

Вам нужно добавить путь к вашему 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", 
    } 
} 

Я рекомендую вам всегда читать всю главу, а не только частичные выдержки из него. ;)

+0

Я забыл упомянуть об этом, но я добавил это также. (Итак, я прочитал целую главу, но спасибо за предложение) – Gubberrr

+0

Вы перестроили автозагрузчик? композитор dumpautoload? Вы можете попробовать отладить автозагрузчик и посмотреть, какие пути он может вызвать для этого пространства имен - если это вообще так. – burzum

+0

После добавления '[' autoload '=> true]' to 'Plugin :: load (' Easyui ');' оно работает. (я рекомендую себе всегда перечитывать главу снова и снова ...) – Gubberrr

Смежные вопросы