1

我很新的Zend(閱讀有關路由器和控制器的文檔)。Zend渲染靜態/動態多控制器

StaticControllerIndexController

class StaticController extends Zend_Controller_Action 
{ 
    public function displayAction() 
    { 
     $page = $this->getRequest()->getParam('filename'); 
     $this->render($page); 
    } 
} 

class IndexController extends Zend_Controller_Action 
{ 
    public function indexAction() 
    { 
     $albums = new Application_Model_DbTable_Albums(); 
     $this->view->albums = $albums->fetchAll(); 
    } 
    public function registerAction() 
    { 
     ... 
    } 
} 

的application.ini:

resources.router.routes.staticpage.route = /:filename 
resources.router.routes.staticpage.defaults.controller = static 
resources.router.routes.staticpage.defaults.action = display 

我的靜態內容的網址是:site.com/faqsite.com/privacy...

這些工作,但是其他諸如site.com/register用途StaticController而不是IndexController,我不能說我很驚訝這種行爲。

這些靜態頁面(關於我們,術語和條件...)需要包含在用於.po翻譯的zend邏輯中。

我可以想出很多不同的方式來實現Zend框架之外的這種方式,但真的想要做到這一點正確的方式。

如何區分靜態和動態內容,並保持漂亮的URL?

任何幫助將不勝感激!

+0

我不太確定我是否理解這個問題。如果你去site.com/faq,應該加載FaqController類的indexAction。你的示例URL都不應該進入索引或靜態控制器。 – CashIsClay

+0

我已經添加了application.ini。我如何區分靜態和動態內容,並保持漂亮的URL? - – Sparkup

+0

你怎麼不只是創建一個FaqController和一個什麼都不做而是渲染視圖的PrivacyController?例如在FaqController'公共功能indexAction(){/ *顯示視圖* /}' – drew010

回答

1

你可以這樣來做:

resources.router.routes.staticpages.route = "/:filename" 
resources.router.routes.staticpages.defaults.controller = static 
resources.router.routes.staticpages.defaults.action = display 
resources.router.routes.staticpages.reqs.filename="(list|of|static|pages)" 

如果你不知道什麼是「請求數」做的是,這是非常簡單的。對於'reqs'中指定的每個參數,您指定它應該匹配的正則表達式才能使用此路由。

但我個人會用每靜態頁面,而不是設置了一個param動作在一個單一的動作,這需要這條路線:

resources.router.routes.staticpages.route = "/:action" 
resources.router.routes.staticpages.defaults.controller = static 
resources.router.routes.staticpages.reqs.action="(list|of|static|pages)" 

它的規劃,你可能有一天需要不同的邏輯來呈現你的一些靜態頁面

+0

謝謝你。第一種方法對降低開銷(與第二種方法相比)是否有任何影響? – Sparkup

+0

在性能水平上沒有真正的差異,但我發現第二個更具可讀性和可維護性。這取決於你自己的喜好 –

+0

太好了,謝謝! – Sparkup

0

您應該考慮使用靜態內容的前綴,以便路由器知道您正在嘗試拉取靜態內容,而不是試圖引用IndexController中的操作。

resources.router.routes.staticpage.route = /static/:filename 
resources.router.routes.staticpage.defaults.controller = static 
resources.router.routes.staticpage.defaults.action = display