我正在尝试为特定模块的 $this->content 创建一个包装器。
我所拥有的是一个主布局(所有模块都将遵循此布局),它使用页眉和页脚等构建基本布局。这些在所有模块中都将保持不变。
但是,我想为其正文内容提供具有自定义布局的模块。即用于自定义导航栏等。
因此具有以下结构:
module
/ ModuleName
/ view
/ layout
/ modulelayout.phtml
/ modulename
/ index
/ index.phtml
view
/ layout
/ layout.phtml
/view/layout/layout.phtml:
<?= $this->doctype(); ?>
<html lang="en">
<head>
...
</head>
<body>
<header>...</header>
<div id='body'>
<?= $this->content; ?>
</div>
<footer>...</footer>
</body>
</html>
/module/ModuleName/view/layout/modulelayout.phtml:
<div>...</div>
<div>
<?= $this->content; ?>
</div>
/module/ModuleName/view/modulename/index/index.phtml:
Hello World
...
因此,我希望 ModuleName 中的所有操作(它们的 $this-> 显示的内容)都使用 modulelayout.phtml 中的布局进行包装。
我在控制器的调度事件上创建了一个侦听器,以便为所有控制器操作捕获它:
public function onBootstrap($e) {
$app = $e->getApplication();
$app->getEventManager()
->getSharedManager()
->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', array($this, 'dispatchControllerStrategy'));
}
现在我需要知道如何保留基本布局,并将我的模块布局添加为包装器?
public function dispatchControllerStrategy($e) {
$controller = $e->getTarget();
$layout = $controller->layout();
$wrapper = new ViewModel();
$wrapper->setTemplate('layout/modulelayout');
$layout->addChild($wrapper, 'content');
}
^^^ 子布局的添加似乎并没有以任何方式包装 $this->content ,并且子布局没有渲染。综合来看,这就是我期望的最终源代码的样子:
<!DOCTYPE html>
<html lang="en">
<head>
...
</head>
<body>
<header>...</header>
<div id='body'>
<div>...</div>
<div>
Hello World
...
</div>
</div>
<footer>...</footer>
</body>
</html>
谢谢!