2012-04-25 36 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