Zend使用多个控制器渲染静态/动态

时间:2011-09-23 19:43:00

标签: php zend-framework zend-route zend-controller zend-controller-router

我对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/faq site.com/privacy ...

这些工作,但是其他人,例如site.com/register使用StaticController而不是IndexController,我不能说我对这种行为感到惊讶。

这些静态页面(关于我们,术语和cond ......)需要包含在.po翻译的zend逻辑中。

我可以想到在Zend框架之外实现这一目的的许多不同方法,但是我们真的希望以正确的 zend 方式实现这一点。

如何区分静态和动态内容,并保留漂亮的网址?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分: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'是什么,那就很简单了。对于'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)"

计划有一天你可能需要不同的逻辑来渲染一些静态页面

答案 1 :(得分:0)

您应该考虑为静态内容使用前缀,以便路由器知道您尝试提取静态内容而不是尝试引用IndexController中的操作。

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