ZF2 — Динамический ViewHelper

Я хочу создать помощник вида, который должен возвращать некоторый 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'
]
];
?>

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

0

Решение

Может быть, вы должны взглянуть на Частицы 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',
)
)

Кажется, простое решение для того, чего вы хотите достичь.
Или у вас есть другие требования?

2

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

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

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