Php 什么是标准的存储方式;“全球”;布局和控制器中的信息?

Php 什么是标准的存储方式;“全球”;布局和控制器中的信息?,php,model-view-controller,zend-framework,Php,Model View Controller,Zend Framework,我有一个基于Zend框架的应用程序,需要在多个控制器和一个全局布局中提供大量信息 因此,我的问题是,从模型层获取这些信息并将其分发到控制器和布局中的最佳/规范方法是什么 我不想从某种基本控制器继承。我的想法转向行动助手或插件。我可以将所需的所有信息存储到布局中,并从需要这些信息的控制器中的视图/布局中读取这些信息。但是,我觉得这个解决方案不是很优雅 有什么想法或提示如何以干净的方式实现这一点吗?听起来使用是一种很好的方法 因为听起来好像您有数据要存储以供访问,所以我认为将其存储在注册表中比使用帮

我有一个基于Zend框架的应用程序,需要在多个控制器和一个全局布局中提供大量信息

因此,我的问题是,从模型层获取这些信息并将其分发到控制器和布局中的最佳/规范方法是什么

我不想从某种基本控制器继承。我的想法转向行动助手或插件。我可以将所需的所有信息存储到布局中,并从需要这些信息的控制器中的视图/布局中读取这些信息。但是,我觉得这个解决方案不是很优雅

有什么想法或提示如何以干净的方式实现这一点吗?

听起来使用是一种很好的方法

因为听起来好像您有数据要存储以供访问,所以我认为将其存储在注册表中比使用帮助程序或插件更有意义

如果您关心注册表中对象的命名,并且必须记住并访问应用程序中的各个键,那么可以使用插件类来抽象Zend_registry::get()。

听起来使用是一种很好的方法

因为听起来好像您有数据要存储以供访问,所以我认为将其存储在注册表中比使用帮助程序或插件更有意义


如果您关心注册表中对象的命名,并且必须记住并访问应用程序中的各个键,那么使用插件类(您可以将其称为抽象类)是有意义的,因为Zend_registry::get()的用法.

对于需要注入到版面公共区域但在操作/视图脚本(侧边栏;身份验证链接,如登录、注销、注册、配置文件等)中无法访问的数据,我可能会使用前端控制器插件

但是,如果您只在某些控制器操作/视图脚本中需要此数据,则 我会用一个带有
preDispatch()
钩子的动作助手来计算/保存数据。确保在引导时注册/实例化此操作帮助程序,以便在稍后触发
preDispatch()
信号时它存在

然后,在控制器中,繁重的工作已经完成:从动作助手中提取数据,并在动作中使用它,或者将其传递到视图脚本


只需大声思考…

对于需要注入到版面公共区域但无法在操作/视图脚本中访问的数据(侧栏;身份验证链接,如登录、注销、注册、配置文件等),我可能会使用前端控制器插件

但是,如果您只在某些控制器操作/视图脚本中需要此数据,则 我会用一个带有
preDispatch()
钩子的动作助手来计算/保存数据。确保在引导时注册/实例化此操作帮助程序,以便在稍后触发
preDispatch()
信号时它存在

然后,在控制器中,繁重的工作已经完成:从动作助手中提取数据,并在动作中使用它,或者将其传递到视图脚本


只是大声想…

我也想到了注册表。但我总是试图在程序中避免全局状态。在ZF中使用它是可以接受的,我认为创建它的部分原因是为了提供一种更可控的方式来存储全局数据。如果注册表中的信息总是相同的,那么默认情况下,我会将application.ini放在注册表中。对于在应用程序过程中发生更改的模型信息,可以选择视图助手将模型数据直接转储到视图中。我也考虑了注册表。但我总是试图在程序中避免全局状态。在ZF中使用它是可以接受的,我认为创建它的部分原因是为了提供一种更可控的方式来存储全局数据。如果注册表中的信息总是相同的,那么默认情况下,我会将application.ini放在注册表中。对于在应用程序过程中更改的模型信息,可以选择视图帮助器将模型数据直接转储到视图中。我喜欢这样!谢谢分享!不客气,很高兴这有帮助。进一步考虑,如果您只需要在某些控制器/操作中使用action helper的结果,那么使用
preDispatch()
hook可能是不可取的,因为它会在每个操作中触发,但只在其中的一些操作中使用。最好是让动作助手在需要它们的控制器/动作调用时按需执行其繁重的操作。我喜欢这样!谢谢分享!不客气,很高兴这有帮助。进一步考虑,如果您只需要在某些控制器/操作中使用action helper的结果,那么使用
preDispatch()
hook可能是不可取的,因为它会在每个操作中触发,但只在其中的一些操作中使用。更好的方法可能是让动作助手在需要它们的控制器/动作调用时根据需要执行其繁重的操作。