2011-10-31 35 views
1

我希望能够路由像在CakePHP中2.0以下几点:配置CakePHP的2.0路由域/参数(没有控制器的名称)

domain.com/london 
domain.com/milton keynes 

到一个特定的控制器和动作。

该应用程序有多个控制器,因此如果提供的参数与控制器名称不匹配,它应该仅使用此路由。 我加入以下代码的config/routes.php

Router::connect(
    '/:location', 
    array('controller' => 'articles', 'action' => 'testing'), 
    array('pass' => array('location'), 'location' => '[a-z ]+') 
); 

下使用该代码使用CakePHP 2.0使用CakePHP 1.3.12实现了这个只有当我从config/routes.php注释掉require线,但后来我松散的默认工作路由,以便指向任何其他控制器的URL被捕获。

如何实现所需的路由?

回答

1

据我所知,这不应该在Cake 1.3中工作,只是因为你的[a-z ]+正则表达式也匹配简单/ controller_name路由的情况;路由器无法区分这两者,因此总是路由到它遇到的第一个路由器。

但是,您可以创建自定义路线类来实现此目的。 Mark Story(Cake的一名开发人员)很早以前就写了一篇关于它的优秀文章,它适用于Cake 1.3,但您可以轻松将原则应用于2.0(我知道因为我在2.0应用程序中使用它)。你可以找到帖子here

+0

感谢 - 是一个自定义的路由类,着眼于所提供的URL,查询数据库,看它是否在那里存在,如果它 - 欢送到调节器 – Richard

0

这可能不是回答上述要求的具体问题,但它是相关的,这个页面出现在搜索结果中,我的目标是拯救谁发现它(包括未来我,我猜)在没有研究什么一段时间我刚刚研究。

我需要为一个不同的域添加一个参数的路由。例如,example.com应该照常运行,而example.org/some_page应该直接路由到特定的控制器和操作。所以我增加了以下我Config/routes.php

if (CakeRequest::host()=='example.org') { 
    Router::connect('/:my_variable', 
     array(
      'controller'=>'my_controller', 
      'action'=>'my_action' 
     ), 
     array(
      'my_variable'=>'[a-zA-Z-0-9 ]+', 
      'pass'=>array('my_variable') 
     ) 
    ); 
} 
相关问题