26

我正在学习ZF2.0 beta。在 ZF1 中,我们可以在控制器中动态更改布局:

Zend_Layout::getMvcInstance()->setLayout('layoutname');

但在ZF2.0 Zend\Layout 类中没有方法 getMvcInstance()。我认为它可以使用依赖注入来实现,但不确定。

4

5 回答 5

57

ZF2 正在大力开发中,不能保证它现在的工作方式,将是 ZF2 达到稳定状态时的工作方式。

然而,来自 Zend\Mvc 的新视图层最近被合并了,所以你现在应该能够做到这一点(使用当前的 master):

public function somethingAction () 
{
    // Do some intelligent work

    $this->layout('layout/different');
}
于 2012-02-23T13:24:53.177 回答
7

我发现在动作中设置模板的最佳方法是这样的

public function someAction() {
    $viewModel = new ViewModel();
    $viewModel->setTemplate('layout/custom');

    return $viewModel;
}

在你module.config.php确保你已经设置了适当的template_map路径。

    'view_manager' => array(
    'template_map' => array(
        'layout/custom' => __DIR__ . '/../view/layout/custom.phtml'
    ),
),
于 2012-12-01T23:58:19.920 回答
7
public function someAction() {
    $layout = $this->layout();
    $layout->setTemplate('layout/custom');
    $viewModel = new ViewModel();
    return $viewModel;
}
于 2013-08-05T15:00:49.347 回答
3

您还必须在引导程序中或使用 di 时设置布局。迪示例:

    'Zend\View\Resolver\TemplateMapResolver' => array(
        'parameters' => array(
            'map'  => array(
            'layout/different' => __DIR__ . '/../view/layout/different.phtml',
            ),
        ),
    ),
于 2012-04-27T12:25:11.593 回答
3

我已经尝试了上述提示。

public function somethingAction () 
{
    // Do some intelligent work

    $this->layout('layout/different');
}

我用这个片段得到了正确的结果。

public function someAction() {
    $viewModel = new ViewModel();
    $viewModel->setTemplate('layout/custom');

    return $viewModel;
}

它获取了两种布局(默认和当前模块)。

于 2013-01-02T13:28:18.913 回答