2

新手Zend框架开发人员试图找出Zend路由问题的简单解决方案。我相信你们中的一位专业人员可以伸出援助之手。Zend_Navigation在编写控制器/操作时与Zend_Router不兼容?

我有一个网站(使用Zend_Navigation建立在Zend框架中),其中包含75%的静态HTML页面内容和一些控制器。顶级导航是在Zend_Navigation中构建的,通过partials循环。

因为我的工作,我沿着这些线建立了很多网站(包含很多静态页面),所以我想要正确地做到这一点。我不想为每个静态页面设置控制器和操作(有很多),我想创建一个解决方案,我使用Zend_Controller_Router_Route将所有静态内容自动路由到其工作的StaticController是包含或呈现.phtml页面基于控制器/动作配对在某种目录的URL如/layouts/staticpages

由于搜索引擎优化和各种原因,我不希望有控制器配对的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不兼容?有没有更好的方法来做这个单一的静态页面控制器或处理板上的静态内容?

+0

您可以编辑您的问题,以包括如何将您的页面添加到Zend_Navigation的例子吗? – 2011-02-10 14:54:26

回答

0

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

检查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();