php - 如何避免 Zend_Navigation 膨胀?

标签 php zend-framework zend-navigation zend-acl

我一直在研究结合使用 Zend_Navigation 和 Zend_Acl 来管理我正在开发的新应用程序中的导航和访问权限。

真正困扰我的一件事是,我看到的示例最终生成了一个巨大的 XML 文件,其中包含应用程序中的每个 可能的导航项。在每个请求上加载这个文件似乎是主要的性能瓶颈,必须有更好的方法。我意识到我可以通过使用 memcached 或其他缓存机制来缓解大部分问题,但我觉得应用程序本身应该以最佳方式编写,然后才添加缓存。做一些缓慢而臃肿的东西并依靠缓存来清理我的脏工作是没有意义的。

我在此 ZF 应用程序中使用模块化设置,因此每个模块都有一个独特的 Bootstrap 。我考虑过创建模块特定的导航 XML 文件并加载特定的文件,但我不确定这是否是最好的方法。

在可能有数百个导航路径的大型应用程序中使用 Zend_Navigation 的建议方法是什么?

最佳答案

我不会将此称为建议方法,它只是两年前我基本上遇到相同问题时使用它的方式。简而言之:我在每一页上都有我需要的 XML 中的所有路径。所有其他路径都是在运行时添加的。然后我才添加 ACL。

首先,请注意 Zend_Navigation 中的 ACL 仅管理导航的显示。它不提供或更好地保证对您的应用程序的访问控制。菜单中将缺少某个链接,但如果用户知道正确的路径,他/她仍然可以访问该资源。当然,您可以使用导航对象中的 ACL 信息来锁定您的应用程序,但我相信有更智能的方法,主要是将 ACL 直接合并到 Controller 和模型中。

第二,关于您的主要问题,我的导航的 XML 文件只包含最基本的结构,直到第二级,这是我一直需要的菜单。这也或多或少是我拥有 Controller 和 Action 的目的。 params 产生的任何路径都在运行时添加。因此,我什至没有将 ACL 包含到 XML 中,而是在运行时注入(inject)它。仅仅是因为只有这样我才能拥有完整的扩展当前分支及其所有路径。

关于php - 如何避免 Zend_Navigation 膨胀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11669115/

相关文章:

php - 从 laravel 中的数据库动态填充语言翻译数组

php - Zend 导航和 Zend ACL

zend-framework - Zend 框架 : Hide navigation item in menu by show in breadcrumbs

PHP - 成功登录时不重定向

java - 我应该使用哪些技术来提供开箱即用的服务器安装

php - PHP/MYSQL 中的并发

Zend Framework 中的 MySQL 资源

PHP fatal error : require_once(): Failed opening required 'Zend/Gdata/Extension.php'

php - 编辑用户配置文件后更新 Zend_Auth_Storage

php - zf3 zend 导航助手