2

Zend 框架开发新手在这里试图找出一个简单的解决方案来解决 Zend 路由问题。我相信你们中的一个专业人士可以伸出援助之手。

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

由于我的工作,我沿着这些思路建立了很多网站(包含很多静态页面),所以我想把它做好。我不想为这些静态页面中的每一个(有很多)设置控制器和操作,我想创建一个解决方案,在该解决方案中,我曾经Zend_Controller_Router_Route将所有静态内容自动路由到StaticController将要执行的工作基于来自某种目录的 URL 中的控制器/动作配对包含或呈现 .phtml 页面,例如/layouts/staticpages

由于 SEO 和各种原因,我不想让这些静态页面的 URL 中的控制器配对显示为/static/page/page1......它必须是/section/page(例如advantages/someadvantage)的“真实世界描述”

问题是:当我设置正确的路线时,使用Zend_Controller_Router_Route可以完成这项工作,但它会使 Zend Navigation 变得糟糕......我认为因为 Zend_Navigaion 不能很好地处理动态控制器/动作切换。

代码示例:

$router = Zend_Controller_Front::getInstance()->getRouter();
$route = new Zend_Controller_Router_Route('advantages/:page/*',
  array('controller' => 'static', 'action' => 'display', 'mode' => 'advantages',
    'page' => 'index'));
$router->addRoute('advantages', $route);

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

Zend_Navigation 是否从根本上不兼容Zend_Controller_Router_Route?有没有更好的方法来做这个单一的静态页面控制器或全面处理静态内容?

4

1 回答 1

0

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

检查Zend 文档中的示例 4

// 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();
于 2011-12-23T17:17:37.890 回答