#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); ?>
…