Reputation: 21957
I am learning ZF2.0 beta. In ZF1 we can change layout on the fly in controller:
Zend_Layout::getMvcInstance()->setLayout('layoutname');
But in ZF2.0 Zend\Layout class doesn't has method getMvcInstance(). I think that it can be made using dependency injections but not sure.
Upvotes: 26
Views: 32940
Reputation: 93
public function someAction() {
$layout = $this->layout();
$layout->setTemplate('layout/custom');
$viewModel = new ViewModel();
return $viewModel;
}
Upvotes: 8
Reputation: 261
I have tried the above tips.
public function somethingAction ()
{
// Do some intelligent work
$this->layout('layout/different');
}
I got the correct result with this snippet.
public function someAction() {
$viewModel = new ViewModel();
$viewModel->setTemplate('layout/custom');
return $viewModel;
}
It fetched both layouts(default & current module).
Upvotes: 3
Reputation: 1077
The best way I've found to set templates in actions is like this
public function someAction() {
$viewModel = new ViewModel();
$viewModel->setTemplate('layout/custom');
return $viewModel;
}
In your module.config.php
make sure you've set your appropriate template_map
path.
'view_manager' => array(
'template_map' => array(
'layout/custom' => __DIR__ . '/../view/layout/custom.phtml'
),
),
Upvotes: 7
Reputation: 306
You will also have to set the layout either in the bootstrap or when using di. Di example:
'Zend\View\Resolver\TemplateMapResolver' => array(
'parameters' => array(
'map' => array(
'layout/different' => __DIR__ . '/../view/layout/different.phtml',
),
),
),
Upvotes: 3
Reputation: 13558
The ZF2 is heavily under development and no guarantee can be made the way it works now, will be the way it works when ZF2 reaches a stable state.
However, the new view layer from Zend\Mvc is recently merged so you should be able to do this now (with current master):
public function somethingAction ()
{
// Do some intelligent work
$this->layout('layout/different');
}
Upvotes: 57