由于 Zend 路由,zend 导航不起作用 [英] zend naviagtion not working due to zend route
问题描述
:问题是由 Zend 路由引起的,请检查更新
: the problem was caused due to zend route please check updates
我使用 xml 文件进行导航.
I am using xml file for navigation.
:以下代码来自layout.phtml文件
:the following code is from layout.phtml file
$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/.有什么想法吗?
when i am in my edit page, all don't any menu link. all get is /admin/controller/edit/ everywhere on menu item. any idea?
我的编辑操作需要 id,如果未提供 id,则会生成并出错.但是 add 和 list 方法工作正常
my edit action takes id, if id is not supplied then it will generate and error. however add and list method works fine
更新::
<?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>
UPDATE::route 用于 bootstrap.php 上的编辑操作
UPDATE::route for the edit action on 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
推荐答案
如果涉及静态路由,则需要在所有导航页面设置路由名称.这是因为导航视图助手使用 Url 视图助手创建链接.
If there are any static routes involved, you need to set the route name on all navigation pages. This is because the navigation view helper uses the Url view helper to create links.
如果没有路由名称,则使用当前路由.
If there is no route name present, it uses the current route.
如果当前路由是静态路由,则无论抛出什么参数,它都只会解析为一个 URL.
If the current route is a static one, it will only ever resolve to one URL, no matter what parameters are thrown at it.
这篇关于由于 Zend 路由,zend 导航不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!