在编写控制器/动作时,Zend_Navigation与Zend_Router不兼容?

时间:2011-02-10 14:27:34

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

新手Zend Framework开发人员试图找出Zend Routing问题的简单解决方案。我相信你们中的一位职业选手可以伸出援助之手。

我有一个网站(使用Zend_Navigation在Zend Framework中构建),其中包含75%的静态HTML页面内容和一些控制器。顶级导航是在Zend_Navigation中构建的,循环遍历部分。

由于我的工作,我沿着这些行构建了很多站点(包含大量静态页面)所以我想要做到这一点。我不想为这些静态页面中的每一个设置控制器和操作(有很多),我想创建一个解决方案,我使用Zend_Controller_Router_Route自动将所有静态内容路由到{ {1}}其作用是根据某种目录(如StaticController

中的URL中的控制器/操作配对来包含或呈现.phtml页面

由于SEO和各种原因,我不希望将这些静态页面的URL中的控制器配对显示为/layouts/staticpages ...它必须是{{的真实世界描述“ 1}}(例如/static/page/page1

问题在于:当我设置正确的路线时,使用/section/page可以完成这项工作但是它与Zend Navigation混淆了一些糟糕的东西...我认为因为Zend_Navigaion不适合使用on-the-飞控制器/动作切换。

代码示例:

advantages/someadvantage

这足以处理在“优势”部分中切换页面的工作,但是Zend_Navigation的自动控制器/动作写入以及“活动”节点的突出显示最终都被搞砸了,因为它现在认为它的控制器是“静态的” “而行动是”显示“。

Zend_Navigation与Zend_Controller_Router_Route根本不兼容吗?有没有更好的方法来执行这个单一的静态页面控制器或全面处理静态内容?

1 个答案:

答案 0 :(得分:0)

由于您对所有静态页面使用一个控制器/操作,因此必须在显示之前自定义Zend Navigation。

检查Example 4 in the Zend Documentation

// the following route is added to the ZF router
Zend_Controller_Front::getInstance()->getRouter()->addRoute(
    'article_view', // route name
    new Zend_Controller_Router_Route(
        'a/:id',
        array(
            'module'     => 'news',
            'controller' => 'article',
            'action'     => 'view',
            'id'         => null
        )
    )
);

// a page is created with a 'route' option
$page = new Zend_Navigation_Page_Mvc(array(
    'label'      => 'A news article',
    'route'      => 'article_view',
    'module'     => 'news',    // required for isActive(), see note above
    'controller' => 'article', // required for isActive(), see note above
    'action'     => 'view',    // required for isActive(), see note above
    'params'     => array('id' => 42)
));

// returns: /a/42
$page->getHref();