2012-07-26 85 views
3

我一直在研究Zend_Navigation和Zend_Acl的結合來管理我正在處理的新應用程序中的導航和訪問權限。如何避免在Zend_Navigation中膨脹?

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

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

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

回答

1

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

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

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

+0

這是一個有趣的想法。實際上,我在考慮可能實現我自己的模塊(可能延長Zend_Navigation),這將朝着我的目的更多的定製。 – 2012-07-26 18:20:01

+0

@cillosis嗯,這是ZF的美,我喜歡它是什麼。你可以定製你需要爲你的目的,以相當多的東西。 – 2012-07-27 13:18:00

0

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

使用的模塊,你可以設置導航對象在註冊表中,每個模塊中有一個模型,增加了它的網頁,並調用每個模塊的在preDispatch導航模型的插件。