2010-01-18 45 views
0

我使用主機名路由來捕獲子域並將其用作類別。然後,我爲控制器,操作和鍵/值對鏈接一個路由器路由。Zend框架中的關鍵值路由路由

$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
':customer.ddc.:domain', 
array(
    'customer' => ':customer' 
) 
); 

$routerRoute = new Zend_Controller_Router_Route(
':controller/:action/*', 
array(
    'controller' => 'index', 
    'action' => 'index' 
) 
); 
$chainedRoute = $hostnameRoute->chain($routerRoute); 
$frontController->getRouter()->addRoute('default',$chainedRoute); 

我可以捕獲除URI上的鍵/值對之外的所有內容。添加它們會導致請求中的Params對象無法填充。

這工作:http://category.mydomain.com/controller/action/

這不:http://category.mydomain.com/controller/action/username/frank

感謝您的任何建議。

回答

0

確實存在一個在鏈接路由時阻止通配符匹配的錯誤。錯誤描述中的註釋對於解決這個問題非常有幫助,只需更改幾行代碼即可。

framework.zend.com/issues/browse/ZF-6654

1

嘗試使用沒有/*

$routerRoute = new Zend_Controller_Router_Route(
    ':controller/:action', 
    array(
     'controller' => 'index', 
     'action'  => 'index' 
    ) 
); 

如在12.5.2. Using a Router中所述。

+0

謝謝你的迴應。刪除*沒有幫助。 12.5.7。路由類型討論添加*來匹配URI中的尾隨鍵/值對。但是,它似乎只能捕獲一個密鑰。任何嘗試添加更多,以及請求對象中的參數都不會被填充。 – BillA 2010-01-18 16:21:27

+0

這是一個奇怪的出價。現在'http:// category.mydomain.com/controller/action/username/frank'將你重定向到哪個'controller','action'等等? – hsz 2010-01-18 16:32:31

+0

它不會在任何地方重定向。路線的映射完全消失了。我認爲我已經將它作爲ZF的一個bug進行搜索: http://framework.zend.com/issues/browse/ZF-6654 – BillA 2010-01-18 16:40:22

1

建議的補丁並沒有爲我工作。我修改了在ZF網站其他地方發現的另一個補丁,它似乎運作良好:http://pastie.org/1815135