CakePHP的路由器,路由不工作

CakePHP的路由器,路由不工作

问题描述:

我有这样的路线:CakePHP的路由器,路由不工作

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

我想每次调用

/con1/x1/x2 

直接到

/con3/x1/x2 

/con2/y1/y2 

/con3/y1/y2 

它不工作,为什么?

如果需要路由到/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

你有没有考虑这样的:

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