And*_*eth 5 php zend-framework zend-layout
当试图遵守既定的最佳实践,避免像单身,注册表,静态属性和基本控制器,我怎么能填充我的布局(和谐音的布局设计中使用),与仅跨越所有操作使用的布局和共同的数据?
典型的场景是基于可变数据的菜单,如数据库.记住问题的分离,视图/布局不应该直接与后端对话,而应该告诉要包含什么.
如果不使用Zend_Layout中的单例"功能",则无法使用前端控制器插件.该插件只知道请求和响应对象,也无法访问控制器,视图或布局.
Zend的动作助手有init/preDispatch/postDispatch方法.可以向HelperBroker添加动作助手(例如使用引导程序),这些将在正常的应用程序流程中执行.
使用init方法将数据注入视图是不可能的,因为它在控制器/视图准备就绪之前被触发.preDispatch/postDispatch是可能的,但并不完美,因为在执行控制器操作时总是会触发这些方法.
这意味着Zend_Controller_Action :: _ forward()的所有使用也将在所有动作助手中执行preDispatch/postDispatch.这不有,除了速度的代码有什么大的影响,我真的不希望被设置视图(或视图助手)可变几次.可以使用某种$ firstRun变量来解决这个问题,但我真的不想在我自己的代码中跟踪它.
另一种方法是在引导程序中执行此操作,但在我看来它确实不属于那里.
那么,我如何使用数据库中的数据填充布局/视图助手,只执行一次并仍然保持良好的关注点分离?
我遵循了该ActionHelper方法,在方法上设置视图变量preDispatch。在我看来,这是最合乎逻辑的地方。此外,我的项目没有使用Zend_Controller_Action::_forward(),所以我对多次触发助手没有任何速度问题。
希望有帮助,