2014-01-22 120 views
-1

我們有一些站點example.com,我想爲不同城市制作路由(例如, example.com/city1,example.com/city2)。Cakephp多級路由

我們還希望顯示當前城市的所有其他控制器和方法(例如, example.com/city1/:controller/:actionexample.com/city2/:controller/:action)。

這看起來像2個或多個不同的網站,在控制器中使用相同的方法,但會根據城市顯示不同的信息。

路由器前綴不適用於我們,因爲可能有10多個城市,並且它必須在控制器中使用相同的方法。

我們可以從管理面板中添加城市。

我們如何製作將從數據庫中取出城市並正確顯示所有鏈接的路線?

+0

認罪你可以看看你已經試過的代碼以及你有什麼問題。 –

+0

@Simon我試過這個: $ options = array('city'=>'phoenix | columbus | detroit'); Router :: connect('/:city /:controller /:action/*', array(), $ options); Router :: connect('/:city', array('controller'=>'someControllerName','action'=>'index'), $ options); 並添加參數:城市到其他自定義路線,但我想找到更好的解決方案。 – Igor

回答

0
Router::connect('/:city/:controller/:action/*', array()); 
Router::connect('/:city/:controller/*', array()); 

這會爲您的路線添加前綴,但所有網址都會受到影響。可能還有一種更簡單的方法。

而不是有example.com/users/login,你將需要有example.com/New-York/users/login。

如果你想產生所有這些鏈接,讓我們知道你有什麼樣的控制器和方法。

的路由我粘貼任何前綴(城市名)工作

+0

謝謝,我做了類似的事情。但不確定這是否是最佳解決方案。 – Igor

0

我建議你改變你的URL方案一點點,使用 example.com/cities/city1,而不是example.com/city1。這種改變不僅使得路由/重寫變得更加容易,而且還會排除你添加一個城市的可能性,這個城市將無意與控制器具有相同的名稱!

(當然會有一些辦法來保留原來的命名方案,但它會更難實現,並有一個控制器名稱衝突的風險)

一旦你的/城市部分在那裏,你可以做這樣的事情(從CakePHP Routing採取的示例代碼和沒有測試,只是給你一個想法):

// routes.php 
Router::connect(
    '/cities/:city/:controller/:action/:id', 
    array(), 
    array(
     // order matters since this will simply map ":id" to 
     // $articleId in your action 
     'pass' => array('id', 'city'), 
     'id' => '[0-9]+' 
    ) 
); 

在你的控制器:

public function view($articleId = null, $city = null) { 
    // some code here... 
} 
+0

謝謝你的回答,但我只需要那些在我的問題中提到的無字城市的路線。 – Igor