1

我希望能够在 CakePHP 2.0 中路由类似以下内容:

domain.com/london
domain.com/milton keynes

到特定的控制器和动作。

应用程序有多个控制器,因此如果提供的参数与控制器名称不匹配,它应该只使用此路由。我通过在 CakePHP 1.3.12 的底部添加以下代码来实现这一点config/routes.php

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

仅当我注释掉requirefrom 中的行时,才能将此代码与 CakePHP 2.0 一起使用config/routes.php,但随后我会丢失默认路由,以便指向任何其他控制器的 URL 被此捕获。

如何实现所需的路由?

4

2 回答 2

1

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

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

于 2011-11-01T23:56:47.403 回答
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')
        )
    );
}
于 2015-12-15T12:13:44.923 回答