2010-07-15 43 views
3

是否有可能在cakephp中執行域特定的路由?在CakePHP中通過主機名進行路由

例如,假設我有兩個域:manufacturer.comproductname.com

productname.com停放在manufacturer.com

我想創建一個像這樣的路線:

Router::connect('http://www.productname.com/', array('controller' => 'products', 'action' => 'view', 'productSlug')); 

所以基本上對manufacturer.com指數是默認pages/indexproductname.com應該products/view/productSlug

這可能與蛋糕?

回答

4

我只是想用我提出的解決方案來回答我自己的問題。

而不是試圖檢查路由內的域,更好的方法是在定義路由之前檢查主機名。例如:

if($_SERVER['HTTP_HOST']=='productname.com') 
    Router::connect('/', array('controller' => 'products', 'action' => 'view', 'productSlug')); 
else 
    Router::connect('/', array('controller' => 'pages', 'action' => 'index')); 

有沒有意見?是好是壞?我還沒有測試過,但至少我沒有看到任何錯誤:)

+0

我認爲這應該工作,很好的工作解決你自己的問題!我唯一擔心的是代碼庫中主機名的硬編碼。如果您做了類似的事情,但在AppController中,您可以從數據庫中檢索主機/路由數據,這將使管理界面更易於維護和管理。 – 2010-07-21 15:27:53

+0

謝謝。如果它是一個更大的網站,我也可能會擔心硬編碼的主機名,但在這種情況下,它並不重要。我想更多地瞭解您所建議的方法。如果沒有太多的麻煩,你可以分享一些示例代碼嗎? – jpeltoniemi 2010-07-21 16:20:41

+0

任何人發現這一點:**確保你把它放在'Config/routes.php'中,否則它將不起作用。 – 2015-12-15 12:09:00

1

這是可能的,但我可能不會使用路由來做到這一點。主要是因爲在他們面前我不是巫師;)。

對於您想要的靈活性,我會認爲您可以將所有請求路由到集中控制器(實際上可能是您的AppController)。然後讓該控制器確定調用不同控制器和操作的邏輯。

+0

對不起,回覆遲了,一直很忙:) 不錯的想法。我會記住這一點,雖然我自己想出了其他的東西(感謝你的回答):) – jpeltoniemi 2010-07-19 00:18:14