Я хочу создать помощник вида, который должен возвращать некоторый HTML-код, например:
<div class="panel panel-default">
<div class="panel-body">
:: Here is my content ::
</div>
</div>
План заключается в том, чтобы вызывать его следующим образом, где параметр должен быть ключом в моей конфигурации, который определяет класс помощника вида для генерации содержимого моей панели:
<?php
echo $this->panel('test');
$config = [
'view_helpers' => [
'factories' => [
'Panel' => 'Application\View\Helper\Factory\PanelFactory',
'Test' => 'Application\View\Helper\Factory\TestFactory'
]
],
'panels' => [
'test' => 'Test'
]
];
?>
Таким образом, я мог загрузить все содержимое пользовательского помощника вида в панель, но мне пришлось бы добавить менеджер помощника вида в мой помощник вида панели, чтобы загрузить требуемый помощник вида из моей конфигурации. Будет ли это правильно или есть лучшее решение?
Может быть, вы должны взглянуть на Частицы ZF2. Если я не ошибаюсь, кажется, что помощник с частичным представлением делает то, что вы хотите.
Вы определяете шаблон (panel.phtml
):
<div class="panel panel-default">
<div class="panel-body">
<?php echo $this->content ?>
</div>
</div>
В том виде, в котором вы хотите вывести свою панель частично:
$this->partial('panel.phtml', array(
'content' => 'Whatever content you prefer (can also be another partial)'
);
Вы можете зарегистрировать свои партиалы так, как если бы вы регистрировали любое другое представление внутри вашей карты шаблона в конфигурации помощника вида:
'view_manager' => array(
'template_map' => array(
'layout/layout' => __DIR__ . '/../view/layout/layout.phtml',
'header' => __DIR__ . '/../view/layout/header.phtml',
'footer' => __DIR__ . '/../view/layout/footer.phtml',
'error/404' => __DIR__ . '/../view/error/404.phtml',
'error/index' => __DIR__ . '/../view/error/index.phtml',
'panel' => __DIR__ . '/../view/partial/panel.phtml',
'test' => __DIR__ . '/../view/partial/test.phtml',
)
)
Кажется, простое решение для того, чего вы хотите достичь.
Или у вас есть другие требования?
Других решений пока нет …