簡體   English   中英

如何避免Zend_Navigation中的膨脹?

[英]How to avoid bloat in Zend_Navigation?

我一直在研究使用Zend_Navigation與Zend_Acl結合來管理我正在開發的新應用程序中的導航和訪問權限。

真正困擾我的一件事是,我看到的例子最終制作了一個巨大的XML文件,其中包含應用程序中的每個可能的導航項。 在每個請求上加載此文件似乎是主要的性能瓶頸,必須有更好的方法。 我意識到我可以通過使用memcached或其他緩存機制來緩解大部分問題,但我覺得應用程序本身應該以最佳方式編寫,只有這樣,你才能添加緩存。 做一些緩慢而臃腫的東西並依靠緩存來清理我的臟工作是沒有意義的。

我在這個ZF應用程序中使用模塊化設置,因此每個模塊都有一個獨特的引導程序。 我考慮過創建模塊特定的導航XML文件並加載特定的文件,但我不確定這是否也是最好的方法。

在具有潛在數百個導航路徑的大型應用程序中使用Zend_Navigation的建議方法是什么?

當我兩年前基本上有同樣的問題時,我不會稱之為建議的方法,而是我如何使用它。 簡而言之:我在每個頁面上都需要XML中的所有路徑。 所有其他路徑都在運行時添加。 只有這樣我才添加ACL。

首先,請注意Zend_Navigation中的ACL僅管理導航的顯示。 它不提供或更好地保證對您的應用程序的訪問控制。 菜單中將缺少某個鏈接,但如果用戶知道正確的路徑,則他/她可以訪問該資源。 當然,您可以使用導航對象中的ACL信息來固定應用程序,但我相信有更聰明的方法主要是將ACL直接合並到控制器和模型中。

其次,對於你的主要問題,我的導航的XML文件只包含最基本的結構,直到第二級,這是我一直需要的菜單。 它也或多或少都是我擁有的控制器和動作。 在運行時添加由params產生的任何路徑。 因此我甚至不將ACL包含在XML中,而是在運行時注入它。 僅僅因為那時我才擁有完整的擴展當前分支及其所有路徑。

我沒有使用XML來生成導航。 可以使用數組表示法在php中在運行時添加頁面。

使用模塊,您可以在注冊表中設置導航對象,在每個模塊中都有一個添加其頁面的模型,以及一個在preDispatch上調用每個模塊的導航模型的插件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM