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