Менеджер плагинов ZF2 view не объединяет конфигурацию

На моем module.config.php у меня есть что-то вроде:

 return [
'view_helpers' => [
'invokables' => [
'mycustomviewhelper' => 'Namespace\View\Helper\MyCustomViewHelper',
],
],
];

У меня также есть служебный класс, который будет отвечать за рендеринг помощника. Что-то вроде Zend \ Paginator.

Zend \ Paginator имеет метод __toString (), который проксирует вызов render (), который создает экземпляр View\Renderer\PhpRenderer() а потом звонит $view->paginationControl($this),

Я пытаюсь повторить аналогичную функциональность в моем служебном классе, который имеет стратегию, аналогичную той, что уже делает Zend \ Paginator, единственное отличие состоит в том, что мой помощник вида — пользовательский. Следовательно, мой код выглядит так:

$view->MyCustomViewHelper($this);

Это не работает, потому что PhpRenderer игнорирует настройки, определенные вручную, и выполняет следующее в getHelperPluginManager:

$this->setHelperPluginManager(new HelperPluginManager());

Я попытался вызвать помощников, уже определенных в ViewHelperManager, и это работает хорошо.

Я попытался слить в конфигурации заранее и затем установил PhpRenderer в представлении, но затем это вызвало другие проблемы, такие как мои партиалы не были найдены и т.д.

Теперь мой вопрос: почему ZF не учитывает какие-либо пользовательские зарегистрированные представления при попытке отрисовки его изолированно? Есть ли другой способ сделать это?

Спасибо.

0

Решение

Правильно, после небольшой отладки и игры с конфигами, я смог сделать эту работу. Все еще не уверен, что это лучший способ сделать это, но похоже, что в настоящее время нет другого способа заставить его работать.

Я создал фабрику для служебного класса, создал экземпляр PhpRenderer, а затем вручную слил мою конфигурацию с ViewPluginManager. Моя фабрика теперь выглядит так:

public function createService(ServiceLocatorInterface $serviceLocatorInterface)
{
$dataTable = new DataTable;

$phpRenderer = new PhpRenderer();
$config = new \Zend\ServiceManager\Config([
'invokables' => [
'datatablerenderer' => 'DataTable\View\Helper\DataTableRenderer'
],
]);

$phpRenderer->setHelperPluginManager(new HelperPluginManager($config));
$dataTable->setView($phpRenderer);
return $dataTable;
}

Однако придется реорганизовать это так, чтобы конфиг исходил из view_helpers Конфигурационный ключ и не является жестко закодированным.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]