Создание помощника (Helper) в Zend Framework 3 (Невозможно)

#zend-framework3

#zend-framework3

Вопрос:

Я создаю класс в /module/Application/src/View/Helper/Messages

Код:

 <?php
namespace ApplicationViewHelper;
use ZendViewHelperAbstractHelper;

class Messages extends AbstractHelper { 
public function __construct() {   
}   
protected function renderErrorMessages($item) {
        echo "!!!";
}

}
  

Добавьте его в module.config.php
Код:

   ....
    'controllers' => [
        'factories' => [
            ControllerIndexController::class => InvokableFactory::class,                       
            ControllerUserController::class => InvokableFactory::class,                       
        ],
    ],
    'view_helpers' => [
            'factories' => [
                ViewHelperMessages::class => InvokableFactory::class,                   
            ],
           'aliases' => [
                'messages' => ViewHelperMessages::class
           ]
        ],                   
    'view_manager' => [
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
  

На странице login.phtml я вставляю код:

 ...
<?php echo $this->Messages()->renderErrorMessages(); ?>
...
  

И получаем в журнале ошибку:

[Ср. 13 марта 12:18:30.725622 2019] [php7:ошибка] [pid 9697] [клиент 127.0.0.1:52914] PHP Фатальная ошибка: неперехваченный ZendServiceManagerExceptionServiceNotFoundException: плагин по имени «Messages» не был найден в диспетчере плагинов ZendViewHelperPluginManager в /var/www/webuseorg4/vendor/ zendframework/zend-servicemanager/src/AbstractPluginManager.php:142n Трассировка стека:n#0 /var/www/webuseorg4/vendor/zendframework/zend-view/src/Renderer/PhpRenderer.php (376): ZendServiceManagerAbstractPluginManager->get(‘Messages’, NULL)n#1 /var/www/webuseorg4/vendor/zendframework/zend-view/src/Renderer/PhpRenderer.php (394): ZendViewRendererPhpRenderer->плагин(‘Messages’)#n#2 /var/www/webuseorg4/module/Application/view/layout/login.phtml(32): ZendViewRendererPhpRenderer->__call(‘Messages’, Array)n#3 /var/www/webuseorg4/vendor/zendframework/zend-view/src/Renderer/PhpRenderer.php (506): включить(‘/var/www/webuse…’)n#4 /var/www/webuseorg4/vendor/zendframework/zend-view/src/View.php(207): ZendViewRendererPhpRenderer->render(NULL)n#5 /var/www/webuseorg4/vendor/zendframework/zend-mvc/src/View/Http/DefaultRenderingStrateg в /var/www/webuseorg4/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php в строке 142, referer: http://127.0.0.128/user/login 1

Что я делаю не так?

Комментарии:

1. что вы хотите сделать? создать свой собственный помощник пользовательского представления? или использовать существующий для сообщений об ошибках?? вы регистрируете «сообщения» и вызываете $this->Messages с прописными буквами, затем вызываете renderErrorMessages() без аргумента, но в функции класса у вас есть аргумент $item. Пожалуйста, отредактируйте свой вопрос.

Ответ №1:

Обновите конфигурацию view-helper полным именем класса.

 'view_helpers' => [
                'factories' => [
                    ApplicationViewHelperMessages::class => InvokableFactory::class,                   
                ],
               'aliases' => [
                    'messages' => ApplicationViewHelperMessages::class
               ]
            ],    
  

И на странице login.phtml:

 <?php echo $this->messages()->renderErrorMessages($item); ?>