2012-04-25 33 views
0

我一直试图绕过路由,因为这个原因建立一个小应用程序来摆弄,但我设法偶然发现一个问题。Zend Framework重定向和路由,不知何故无法正常工作

整个测试的目标是隐藏网址'hostname/content/index/add',并将其变成一个对于像'hostname/wms/content/add'这样的用户更容易理解的url。

但现在由于一些奇怪的原因,我不能使用$ this-> url()方法重定向。但不知何故,像somelink一样的正常链接工作。

我已经在application.ini中构建了几条路线来测试它的工作原理。这没有什么特别的...

resources.router.routes.contentroute.route = "/wms/content" 
resources.router.routes.contentroute.defaults.module = content 
resources.router.routes.contentroute.defaults.controller = index 
resources.router.routes.contentroute.defaults.action = index 

resources.router.routes.vacaturesroute.route = "/wms/vacatures" 
resources.router.routes.vacaturesroute.defaults.module = vacatures 
resources.router.routes.vacaturesroute.defaults.controller = index 
resources.router.routes.vacaturesroute.defaults.action = index 

因此,当我输入主机名/ WMS /内容我重定向到内容模块的IndexController,它的的indexAction。这对所有在我的观点,即指向的内容模块,这样

​​

但是它不适合3个环节的工作环节,实际上对索引控制器的一个具体行动重定向工作正常,那很页面主机名/ WMS /内容。

<a href="<?php echo $this->url(array('controller'=>'index','action'=>'add'));?>">Add new content</a> 

而不是对在索引控制器的附加动作我重定向到主机名/ WMS /内容实际上重定向,至极的是我正在添加从页面。

任何人都有一个想法,为什么发生这种情况,并可能有办法解决这个问题?或者我完全接近这个错误的方式?

回答

1

首先,你的路线是静态的。您应该替换它们:

resources.router.routes.contentroute.route = "/wms/content/:action/*" 
resources.router.routes.contentroute.defaults.module = content 
resources.router.routes.contentroute.defaults.controller = index 
resources.router.routes.contentroute.defaults.action = index 

然后,您应该指定路线的名称,并在复位参数传递true:

$this->url(
    array('module'=>'content', 'controller'=>'index','action'=>'add'), 
    'contentroute', 
    true 
); 
+0

非常感谢!这确实解决了这个问题。我不知道需要向路由添加“/:action/*”,或者需要指定路由本身。 – 2012-04-25 14:58:02

0

试试这个,而不是

<a href="<?php echo $this->url(array('controller'=>'index','action'=>'add','module'=>'xyz'),null,true);?>">Add new content</a> 

更换XYZ你的模块名称。

+0

如果您通过在名称PARAM空,它采用默认路由。 – Maxence 2012-04-25 08:16:48

+0

@Maxence路由没有为这个URL定义,请检查由op发布的配置。 – 2012-04-25 08:22:46

+0

你是对的。我认为他的配置是错误的,但你的答案在这种情况下起作用。抱歉。 – Maxence 2012-04-25 08:29:26