我想为一个新的控制器设置不同的布局,请提供一个理想位置的建议,以便通过控制器进行设置?现在我正在使用$this->layout()
在每一个行动。在ZF1中曾经有过preDispatch
,不确定它是如何在ZF2中实现的。为Zend Framework 2控制器设置默认布局的理想位置?
1
A
回答
3
控制器动作被调用时,每个控制器都会触发事件dispatch
。此事件包含在包含某些标识符的EventManager
对象中。这使得SharedEventManager
可以通过具有特定标识符的EventManager监听中的特定事件。
现在每个控制器(例如MyModule\Controller\FooController
)有两个已知标识符:
- 类的名称(
MyModule\Controller\FooController
) - 类(
MyModule
)
的顶级命名空间您的MyModule的Module.php类是放置此逻辑的最佳位置。当应用程序引导时,为该模块(即Module.php类的命名空间!)附加一个侦听器,用于调度事件。这可以确保在调用控制器的操作时调用该函数,但在调度另一个控制器时监听器不会执行。
namespace MyModule;
use Zend\Mvc\MvcEvent;
class Module
{
public function onBootstrap($e)
{
$app = $e->getApplication();
$em = $app->getEventManager(); // Specific event manager from App
$sem = $em->getSharedManager(); // The shared event manager
$sem->attach(__NAMESPACE__, MvcEvent::EVENT_DISPATCH, function($e) {
$controller = $e->getTarget(); // The controller which is dispatched
$controller->layout('layout/my-module-layout');
});
}
}
此方法(如何做与特定模块内部控制器的东西)也以一个blog post of mine说明。由于模块特定的布局在Zend Framework 2中变得非常常见,因此Evan Coury为此做了一个模块。它被称为EdpModuleLayout,安装模块时相当容易。
您在配置中提供了一个MyModule
=>layout/template
的数组,然后该模块处理剩下的部分。
相关问题
- 1. Zend Framework - 为控制器设置没有布局
- 2. Zend Framework 2:使用MvcEvent设置布局
- 3. Zend Framework中的默认主页设置
- 4. 在Zend Framework 2中将默认编码设置为ISO
- 5. Zend Framework:设置默认响应部分
- 6. Zend Framework:如何附加默认布局
- 7. 默认情况下没有布局的Zend Framework 2动作
- 8. Zend Framework 2设置默认值,如果输入无效
- 9. 在Zend Framework 2中设置PHP设置
- 10. 我可以在MVC3基础控制器上为ViewResults设置默认布局吗?
- 11. 设置默认控制器或排除URL zend框架
- 12. Zend Framework 2骨架布局
- 13. 设置默认的Magento页面布局
- 14. 如何设置控制器的布局
- 15. 在MVC4中设置默认控制器
- 16. Zend Framework 2设置Zend \ InputFilter setRequired()
- 17. 在Zend Framework 2中为不同的模块设置不同的布局?
- 18. 如何将相对布局设置为默认布局
- 19. Zend SMTP默认设置
- 20. 如何设置控制器的默认区域设置
- 21. 设置布局管理器
- 22. 从Bootstrap设置Zend布局
- 23. 为Zend Framework设置.htaccess
- 24. Zend Framework:布局
- 25. 基本控制器的Zend Framework 2
- 26. Zend Framework中的默认用户设置策略
- 27. 更改Zend Framework 2的默认模板解析器行为
- 28. 设置Zend Framework - MVC
- 29. 更改Zend Framework 2.0控制器中的布局
- 30. Zend Framework中控制器和布局中的数据流
在这里尝试了一吨的例子,这是唯一的工作。最简单的解决方法,谢谢 –