2011-01-27 59 views
4

编辑:: 的问题起因于Zend的路线请更新Zend公司naviagtion没有工作,由于Zend的路线

我使用xml文件进行导航。

编辑::下面的代码是从layout.phtml文件

$config = new Zend_Config_Xml(APPLICATION_PATH.'/configs/adminnav.xml', 'nav'); 
$container = new Zend_Navigation($config); 
$this->navigation()->setContainer($container); 
echo $this->navigation(); 

当我在我的编辑页面,所有没有任何菜单链接。所有得到的都是菜单项上的/ admin/controller/edit/everywhere。任何想法?

我的编辑动作需要id,如果id没有提供,那么它会产生错误。但是添加和列表法正常工作

最新通报::

<?xml version="1.0"?> 
<config> 
<nav> 
    <home> 
     <label>home</label> 
     <uri>#</uri> 
     <pages> 
      <home> 
       <label>home</label> 
       <module>admin</module> 
       <controller>home</controller> 
       <action>index</action> 
      </home> 
      <help> 
       <label>help</label> 
       <module>admin</module> 
       <controller>home</controller> 
       <action>help</action> 
      </help> 
     </pages> 
    </home> 
    <page> 
     <label>pages</label> 
     <uri>#</uri> 
     <pages> 
      <static> 
       <label>static pages</label> 
       <module>admin</module> 
       <controller>page</controller> 
       <action>index</action> 
      </static> 
      <editpage> 
       <label>static pages</label> 
       <module>admin</module> 
       <controller>page</controller> 
       <action>edit</action>   
      </editpage> 
     </pages> 
    </page> 

    <destination> 
     <label>destinations</label> 
     <uri>#</uri> 
     <pages> 
      <list> 
       <label>list all</label> 
       <module>admin</module> 
       <controller>destination</controller> 
       <action>index</action> 
      </list> 
      <featured> 
       <label>featured</label> 
       <module>admin</module> 
       <controller>destination</controller> 
       <action>featured</action>     
      </featured> 
      <add> 
       <label>add destination</label> 
       <module>admin</module> 
       <controller>destination</controller> 
       <action>add</action> 
      </add> 
      <editdest> 
       <label>edit destination</label> 
       <module>admin</module> 
       <controller>destination</controller> 
       <action>edit</action>   
      </editdest> 
     </pages> 
    </destination> 

    <tours>   
    <label>tours</label> 
     <uri>#</uri> 
     <pages> 
      <list> 
       <label>list tours</label> 
       <module>admin</module> 
       <controller>tour</controller> 
       <action>index</action> 
      </list> 
      <featured> 
       <label>featured tours</label> 
       <module>admin</module> 
       <controller>tour</controller> 
       <action>featured</action> 
      </featured> 
      <add> 
       <label>add tours</label> 
       <module>admin</module> 
       <controller>tour</controller> 
       <action>add</action> 
      </add> 
      <edittour> 
       <label>edit tours</label> 
       <module>admin</module> 
       <controller>tour</controller> 
       <action>add</action> 
      </edittour> 
     </pages> 
    </tours> 

    <hotels>    
    <label>hotels and resort</label> 
     <uri>#</uri> 
     <pages> 
      <list> 
       <label>list hotel</label> 
       <module>admin</module> 
       <controller>hotel</controller> 
       <action>index</action> 
      </list> 
      <add> 
       <label>add hotel</label> 
       <module>admin</module> 
       <controller>hotel</controller> 
       <action>add</action> 
      </add> 
      <edithotel> 
       <label>add hotel</label> 
       <module>admin</module> 
       <controller>hotel</controller> 
       <action>add</action> 
      </edithotel> 
     </pages> 
    </hotels> 

    <message>   
     <label>message</label> 
     <uri>#</uri> 
     <pages> 
      <all> 
       <label>all message</label> 
       <module>admin</module> 
       <controller>message</controller> 
       <action>index</action> 
      </all> 
      <contactus> 
       <label>contact</label> 
       <module>admin</module> 
       <controller>message</controller> 
       <action>contact</action> 
      </contactus> 
      <inquiry> 
       <label>inquiry</label> 
       <module>admin</module> 
       <controller>message</controller> 
       <action>inquiry</action> 
      </inquiry> 
      <reservation> 
       <label>reservation</label> 
       <module>admin</module> 
       <controller>message</controller> 
       <action>reservation</action> 
      </reservation> 
     </pages> 
    </message> 

    <advertisement>   
     <label>advertisement</label> 
     <uri>#</uri> 
     <pages> 
      <list> 
       <label>list ads</label> 
       <module>admin</module> 
       <controller>advertisement</controller> 
       <action>index</action> 
      </list> 
      <add> 
       <label>add ads</label> 
       <module>admin</module> 
       <controller>advertisement</controller> 
       <action>add</action> 
      </add> 
      <editad> 
       <label>edit ads</label> 
       <module>admin</module> 
       <controller>advertisement</controller> 
       <action>edit</action> 
      </editad> 
     </pages> 
    </advertisement> 

    <setting>   
     <label>settings</label> 
     <uri>#</uri> 
     <pages> 
      <view> 
       <label>view</label> 
       <module>admin</module> 
       <controller>setting</controller> 
       <action>view</action> 
      </view> 
      <account> 
       <label>account setting</label> 
       <module>admin</module> 
       <controller>setting</controller> 
       <action>account</action> 
      </account> 
      <site> 
       <label>site setting</label> 
       <module>admin</module> 
       <controller>setting</controller> 
       <action>site</action> 
      </site> 
     </pages> 
    </setting> 
</nav> 
</config> 

更新::对bootstrap.php中编辑行动路线

$frontcontroller = Zend_Controller_Front::getInstance(); 
    $router = $frontcontroller->getRouter('router'); 

    //add route for edit page so that pageid is not displayed in the url 
    $router->addRoute(
     'edit-page', 
     new Zend_Controller_Router_Route('admin/page/edit/:pageid', array(
      'module' => 'admin', 
      'controller' => 'page', 
      'action' => 'edit', 
      'pageid' => 'pageid' 
     )) 
    ); 

更新::菲尔

<editdest> 
    <label>edit destination</label> 
    <module>admin</module> 
    <controller>destination</controller> 
    <action>edit</action> 
    <route>12</route>  
</editdest> 

此错误::

Fatal error: Zend_Controller_Router_Exception: Route 12 is not defined in 
/usr/share/php/libzend-framework-php/Zend/View/Helper/Navigation/HelperAbstract.php 
on line 522 
+0

据我了解,导航在添加和列表操作中工作,但它仅在编辑操作中不起作用,是的?所有操作(即编辑,列表,添加)的菜单是否相同?您还可以提供其他代码片段吗?从你的编辑动作,添加动作(因为它的作品),你的XML文件。 – Marcin 2011-01-27 15:10:14

+0

向我们展示XML。请格式化您的问题。你为什么不使用大写字母? – takeshin 2011-01-27 19:52:28

+0

@Marcin菜单对于所有操作都是一样的,它从布局文件 – 2011-01-28 05:28:54

回答

3

如果涉及到任何静态路由,则需要在所有导航页面上设置路由名称。这是因为导航视图助手使用Url视图助手来创建链接。

如果没有路由名称存在,则使用当前路由。

如果当前路由是一个静态路由,它将永远只解析为一个URL,无论引发什么参数。

1

您应该使用您在$router->addRoute中定义的路线。

它应该是:

$router->addRoute(
    'edit-page', 
    new Zend_Controller_Router_Route('admin/page/edit/:pageid', array(
     'module' => 'admin', 
     'controller' => 'destination', 
     'action' => 'edit', 
     'pageid' => 'pageid' 
    )) 
); 


<editdest> 
    <label>edit destination</label> 
    <module>admin</module> 
    <controller>destination</controller> 
    <action>edit</action> 
    <route>edit-page</route> 
    <params> 
     <pageid>12</pageid> 
    </params>  
</editdest> 

如果您需要在每一页上不同的编辑链接,你必须动态地更新导航容器中的参数,可以即:

// (pseudocode, not tested) 
$this->navigation()->getContainer()->findOneByLabel('edit destination')->params->pageid = 12