2011-05-01 289 views
0

我有這樣的路線:CakePHP的路由器,路由不工作

Router::connect(
    '/:controller/*', 
    array('controller'=>'con3'), 
    array('controller'=>'con1|con2') 
      ); 

我想每次調用

/con1/x1/x2 

直接到

/con3/x1/x2 

/con2/y1/y2 

/con3/y1/y2 

它不工作,爲什麼?

回答

0

如果需要路由到/con3//con1/ /或/con2/根據自己的約束,你需要的是一個定製Route class。爲此,沒有比Mark Story's tutorial on custom Route classes更好的地方。

否則,你當然可以只擴展你的控制器(和不離身空)是這樣的:

<?php 
class Con3Controller extends Con1Controller{ 
    // maybe add model here if you don't have 
    // var $uses in Con1Controller 
    // otherwise, extend is just fine 
} 
?> 

在這種情況下,你不需要惹喜歡你現在的中轉航線。對象繼承會照顧你的「別名」。

+0

謝謝@Oerd,但是,我如何從con1和con2擴展con3? – yossi 2011-05-02 12:20:19

+0

@yossi多重繼承不是PHP中的開箱即用功能:)現在,我認爲我更瞭解您的需求,我已經更新了我的答案。 – Oerd 2011-05-02 17:26:00

+0

這可能是答案......對我期待蛋糕提供內置解決方案感到羞恥:)謝謝 – yossi 2011-05-03 06:28:30

1

你有沒有考慮這樣的:

Router::connect('/con1/:action/*', array('controller' => 'con3')); 
Router::connect('/con2/:action/*', array('controller' => 'con3')); 
+0

它很髒..我有8個控制器,每個最多有10個別名。 – yossi 2011-05-02 07:07:18

+0

@yossi每個控制器有10個別名不完全是「乾淨」:P如果您需要更新您的代碼,事情將來可能會失控 – Oerd 2011-05-02 17:49:54

+0

事實上,由於它基於關鍵字(如'類別'),因此我別無選擇。唯一的另一種方法是使用htaccess ..它是最差的 – yossi 2011-05-02 19:14:06