2011-05-23 101 views
0

我需要在我的應用程序中有幾個路由,以允許動態字符串繼續前綴。CakePHP反向路由不按預期工作

這裏是我的路線:

Router::connect('/:location/traveler/:controller/*', array('action' => 'index', 'traveler' => true, 'prefix' => 'traveler'), array('pass' => array('location'))); 

舉例來說,如果我去/南/旅行者/請求它會成功的路線,以RequestsController :: traveler_index($位置= '南')。

這是我想要的,但我也需要HtmlHelper :: link()來正確地將URL數組路由到路由中。

這裏是我的呼籲的HtmlHelper ::鏈接():

$this->Html->link('List Requests', array('controller' => 'requests', 'action' => 'index', 'location' => 'south')); 

前綴的路由是(或者應該是),因爲這正從旅客前綴內的視圖稱爲暗示。

調用的URL吐出的是:

http://domain.com/traveler/requests/location:south 

難道我沒有做正確的東西嗎?有什麼辦法可以避免創建一個自定義路由類來正確地反轉這些URL數組的路由嗎?

回答

1

我解決了這個問題。

從routes.php中刪除Router :: connectNamed(),我修復了配置錯誤的路由。

到traveler_index()的反向路徑使用上面列出的路由正常工作,但對任何其他函數(如traveler_edit())的任何調用都會失敗。

使用下面的路線,我能夠得到它反轉路線的任何行動在任何控制器的旅行者前綴與位置作爲變量。

Router::connect('/:location/traveler/:controller/:action/*', array('traveler' => true, 'prefix' => 'traveler'), array('pass' => array('location'))); 

現在,我要的HtmlHelper電話::鏈接()正確反向路線我的網址數組:

$this->Html->link('Edit Details', array('controller' => 'requests', 'action' => 'edit', 'location' => 'south', 1234)); 

...反向航線/南/旅行者/請求/編輯/ 1234

2

您需要通知路由器location應該是使用Router::connectNamed命名的參數。見http://book.cakephp.org/view/947/Named-parameters

+0

我把以上的所有關注我在routes.php文件路徑: '路由器:: connectNamed(陣列( '位置'))' ,它仍然反向路線'http://domain.com/traveler /請求/地點:south' – 2011-05-24 04:01:23