Cakephp多级路由

时间:2014-01-22 16:50:46

标签: cakephp routes

我们有一些网站example.com,我想为不同的城市制作路线(例如。 example.com/city1example.com/city2)。

我们还希望显示当前城市的所有其他控制器和方法(例如, example.com/city1/:controller/:actionexample.com/city2/:controller/:action)。

这看起来像2个或更多不同的网站,在控制器中使用相同的方法,但会根据城市显示不同的信息。

路由器前缀对我们不起作用,因为可能有超过10个城市,并且它必须在控制器中使用相同的方法。

我们可以从管理面板添加城市。

我们如何制作将从数据库中取出城市并正确显示所有链接的路线?

2 个答案:

答案 0 :(得分:0)

Router::connect('/:city/:controller/:action/*', array());
Router::connect('/:city/:controller/*', array());

这会为您的路线添加前缀,但您的所有网址都会受到影响。可能还有一种更简单的方法。

您需要拥有example.com/New-York/users/login,而不是使用example.com/users/login。

如果您想生成所有这些链接,请告诉我们您拥有哪种控制器和方法。

我粘贴的路线适用于任何前缀(城市名称)

答案 1 :(得分:0)

我建议你稍微更改你的网址方案,使用 example.com/cities/city1代替example.com/city1。此更改不仅使路由/重写更容易,而且还将排除添加意外与控制器同名的城市的可能性!

(当然会有一些方法可以保留原来的命名方案,但实现起来会更困难,并且存在与控制器名称冲突的风险)

一旦你有/ cities参与其中你可以做这样的事情(示例代码取自CakePHP Routing而未经过测试,只是为了给你一个想法):

// routes.php
Router::connect(
    '/cities/:city/:controller/:action/:id',
    array(),
    array(
        // order matters since this will simply map ":id" to
        // $articleId in your action
        'pass' => array('id', 'city'),
        'id' => '[0-9]+'
    )
);

在您的控制器中:

public function view($articleId = null, $city = null) {
    // some code here...
}
相关问题